python || 备份语句
在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有些不同。