在Python中,是';foo=x或";“违约”';对的
在javascript中,在Python中,是';foo=x或";“违约”';对的,python,Python,在javascript中,foo=x | |“default”经常被编码。如果x=null,foo=“default” 在python中,foo=x或“default”正确吗?您编写的代码将产生您描述的行为,但我建议如下,即 如果你熟悉C++,你可以把上面的读数当作下面的三元表达式< /p> foo = x ? x : "default"; 如果说“正确”,你的意思是“它有效吗?”,那么是的,它是正确的。它工作得很好,会像你期望的那样工作。但是,请注意,如果x类似于False、0、None、或
foo=x | |“default”
经常被编码。如果x=null
,foo=“default”
在python中,
foo=x或“default”
正确吗?您编写的代码将产生您描述的行为,但我建议如下,即
如果你熟悉C++,你可以把上面的读数当作下面的三元表达式< /p>
foo = x ? x : "default";
如果说“正确”,你的意思是“它有效吗?”,那么是的,它是正确的。它工作得很好,会像你期望的那样工作。但是,请注意,如果x
类似于False
、0
、None
、或”
,foo
也将设置为默认值
,这是由于Python中布尔逻辑的工作方式
如果说“正确”,你的意思是“它是正确的吗?”,那么是的,我也会说它是正确的。这是我在几个项目中看到许多开发人员使用的一种常见模式。Python文档中也给出了一个示例。是的,它可以工作。从
表达式x和y
首先计算x
;如果x
为false
,则返回其值;否则,将计算y
,并返回结果值
表达式x或y
首先计算x
;如果x为true
,则返回其值;否则,将计算y
,并返回结果值
(请注意,和
以及或
都不限制返回的值和类型为False
和True
,而是返回最后计算的参数。这有时很有用,例如,如果s
是一个字符串,如果该字符串为空,则表达式s或'foo'应替换为默认值。)代码>生成所需的值。
(强调矿山)
请注意,当你这样做-
foo = x or "default"
如果
x
为None
或空字符串,则在这两种情况下的“default”
将是表达式的返回值-x或“default”如果已经定义了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
错误案例:
>>> 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
>foo=x或“默认值”
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
foo=x或“默认值”
名称错误:未定义名称“x”
它是“正确的”/有效的代码(只要定义了x
),但请记住foo
对于任何错误值,例如0
、“
、[]
或{}
,都将设置为“默认值”
如果只想在x
不是None
时使用默认值,则可以使用:
foo=x,如果x不是其他“默认值”
这一点如下所示
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是0
或任何“falsy”值foo
将被设置为“default”。只需补充一点:Python程序员通常使用Python中的x和y或z来表示如果x
为真,则返回y
,否则返回z
。从Python 2.5开始。有一个内联if来替换所谓的布尔快捷方式,因为在某些情况下它可能不会给出想要的结果。定义“correct”.你的意思是它不是一个语法错误
?它的结果是相同的,一个不同的陈述,你没有在问题中提供,使它无用?或者什么?在任何情况下,问题应该在被问之前进行研究。