繁体   English   中英

在 Python 中,'foo = x 或“默认”' 是否正确?

[英]In Python, is 'foo = x or "default"' correct?

在javascript中, foo = x || "default" foo = x || "default"通常被编码。 如果x = nullfoo = "default"

在 python 中, foo = x or "default"是否正确?

您编写的代码将产生您描述的行为,但我建议以下内容,这是三元表达式Python 规范形式

>>> x = None
>>> foo = x if x else 'default'
>>> foo
'default'

如果你熟悉C++,你可以把上面的内容当成下面的三元表达式来阅读

foo = x ? x : "default";

是的,它有效。 文档 -

表达式x and y首先计算x 如果xfalse ,则返回其值; 否则,计算y并返回结果值。

表达式x or y首先计算x 如果 x 为true ,则返回其值; 否则,计算y并返回结果值。

(请注意,无论是and也不or限制值并键入他们返回FalseTrue ,而是返回最后一个变量,这有时是有用的,例如,如果s是应该由一个默认值来代替,如果它是一个字符串为空,表达式s or 'foo'产生所需的值。

(强调我的)

请注意,当你这样做 -

foo = x or "default"

如果xNone或空字符串,在这两种情况下, "default"将是表达式的返回值 - x or "default"

它是“正确”/有效代码(只要定义了x ),但请记住,对于任何虚假值,例如0""[]{}foo将被设置为"default"

如果您只想在x不是None使用默认值,则可以使用: foo = x if x is not None else "default"

这在下面被证明。

x = 0
print(x if x is not None else "default")  # prints 0
print(x or "default")  # prints default

如果您正在定义一个函数,您可能只想使用默认参数。

再次证明如下:

def myfunc(x="default"):
    print(x)

myfunc()  # prints default
myfunc("custom value")  # prints custom value

如果“正确”是指“它有效吗?”,那么是的,它是正确的。 它工作正常,并且会按您的预期工作。 但是请注意,如果xFalse0None"" default由于布尔逻辑在 Python 中的工作方式, foo也将设置为default值。

如果“正确”是指“这是正确的约定吗?”,那么是的,我也会说它是正确的。 这是我在多个项目中看到许多开发人员使用的常见模式。 它也在 Python 文档中作为示例给出。

如果x已经定义,代码工作正常,否则你会得到一个错误。

正确用法:

 >>> x= None
 >>> foo = x or "default"
 >>> foo
 'default'

错误情况:

>>> foo = x or "default"

Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    foo = x or "default"
NameError: name 'x' is not defined

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM