![](/img/trans.png)
[英]In python, is 'foo == (8 or 9)' or 'foo == 8 or foo == 9' more correct?
[英]In Python, is 'foo = x or "default"' correct?
在javascript中, foo = x || "default"
foo = x || "default"
通常被编码。 如果x = null
, foo = "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
; 如果x
为false
,则返回其值; 否则,计算y
并返回结果值。表达式
x or y
首先计算x
; 如果 x 为true
,则返回其值; 否则,计算y
并返回结果值。(请注意,无论是
and
也不or
限制值并键入他们返回False
和True
,而是返回最后一个变量,这有时是有用的,例如,如果s
是应该由一个默认值来代替,如果它是一个字符串为空,表达式s or 'foo'
产生所需的值。
(强调我的)
请注意,当你这样做 -
foo = x or "default"
如果x
是None
或空字符串,在这两种情况下, "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
如果“正确”是指“它有效吗?”,那么是的,它是正确的。 它工作正常,并且会按您的预期工作。 但是请注意,如果x
是False
、 0
、 None
或""
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.