Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,是';foo=x或";“违约”';对的_Python - Fatal编程技术网

在Python中,是';foo=x或";“违约”';对的

在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、或

在javascript中,
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”.你的意思是它不是一个
语法错误
?它的结果是相同的,一个不同的陈述,你没有在问题中提供,使它无用?或者什么?在任何情况下,问题应该在被问之前进行研究。