Ruby 支持这一点:
name = name || "default"
如果我在 python 中尝试:
name = name or "default"
口译报告:
NameError: name 'name' is not defined
python中短路评估分配的等价物是什么?
Ruby 支持这一点:
name = name || "default"
如果我在 python 中尝试:
name = name or "default"
口译报告:
NameError: name 'name' is not defined
python中短路评估分配的等价物是什么?
如果您实际定义name
它会起作用:
name = None
name = name or 'default'
短路与实际必须定义变量无关。通常,name
已从某处拉出但为空(假)值:
name = somefunction('name') or 'default'
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 中的其他成语)。我会确保我的变量在一开始就被声明为默认值,然后在需要时将它们更改为非默认值。
这是一个可怕的,可怕的想法,但是......
name = globals().get("name", locals().get("name", "default"))
...会做你想做的事(同时让你不知道你现在是否有一个全局变量或局部变量),并且丑陋到希望让你不去尝试它。
你可以试试这个:
try:
name = "some value"
except NameError:
name = "default value"