Ruby支持这个:
name = name || "default"
如果我在python中尝试:
name = name or "default"
口译员报告:
NameError: name 'name' is not defined
python中短路评估赋值的等价物是什么?
答案 0 :(得分:18)
如果您确实定义了name
,那么它会起作用:
name = None
name = name or 'default'
短路与实际必须定义变量无关。通常,name
已从某处拉出,但是为空(假)值:
name = somefunction('name') or 'default'
答案 1 :(得分:10)
name = globals()['name'] if 'name' in globals() else 'default'
或者,更简洁:
name = globals().get('name','default')
在函数内替换locals()
。
可能只有try/except
:
try:
name
except NameError:
name = 'default'
作为旁注,我绝不会在我的代码中使用这些习语中的任何一个。 (当然,我不会使用你提到的Javascript或Ruby中的其他习语)。我确保我的变量在开始时被声明为默认值,然后在需要时将它们更改为非默认值。
答案 2 :(得分:1)
这是一个可怕的,可怕的想法,但是......
name = globals().get("name", locals().get("name", "default"))
...会做你想做的事情(让你在黑暗中知道你现在是否有全局变量或局部变量),并且非常丑陋,希望你不要尝试它。
答案 3 :(得分:0)
您可以尝试以下方法:
try:
name = "some value"
except NameError:
name = "default value"