python || 备份语句

6 投票
5 回答
1689 浏览
提问于 2025-04-17 04:52

在JavaScript中,我可以这样给一个变量赋值:

var i = p || 4

很明显,如果p没有定义,它就会使用4。那在Python中,有没有比用try: / except:这种组合更优雅的方法来实现这个操作呢?

try:
    i = p
except:
    i = 4

5 个回答

3

你可以用 i = locals().get('p', 4) 这种写法,但我强烈不建议这样做。最好把你的代码结构整理得更清晰,这样就不需要去引用那些可能存在也可能不存在的变量。

我在JavaScript中唯一会用到这种写法的情况是为了伪造命名空间,使用全局对象,这样我就不需要担心我的脚本文件是否按正确的顺序加载。因为Python有一个完善的模块系统,我实在想不出在哪种情况下需要这样做。

3

你可以确保将 p 初始化为一个哨兵值(通常是 None),然后再检查它是否存在:

p = None
...
i = p if p is not None else 4

这是必要的,因为在Python中,变量必须先赋值才能定义。比如在Javascript中,你可以用 var p; 来声明一个变量,在它被赋值之前,它的值会是一个特殊的 undefined

所以在Javascript中,哨兵值可以隐式创建,而在Python中,哨兵值必须明确地创建。

7

有时候,人们会用Python的或运算符来达到这个目的:

def f(p=None):
    i = p or 4
    ...

这个方法依赖于Python特有的一个特点,就是或运算符会返回让表达式为真的那个值,而不是单纯返回True或False。

另一个更灵活的选择是使用条件表达式

def f(p=None):
    i = p if p is not None else 4
    ...

如果你只是想检查一个变量是否已经定义,使用try/except是最简洁的方法:

try:
    i = p
except NameError:
    pass

不过,这种做法在Python中并不常见,可能说明程序设计上有些问题。

更好的做法是把变量初始化为一个占位符值,比如None。在这方面,Python的风格和Javascript有些不同。

撰写回答