“ or
”表达式对赋值的作用:
我们有时会在Python中看到这样的示例,以三元赋值代替条件表达式(实际上,这有助于启发该语言添加条件语句)。
x = a or b
如果
bool(a)返回
False,则
x分配值为
b
条件表达式的相同用例(即三元分配)
这是一个条件表达式的示例,该条件表达式可以完成相同的任务,但可能不那么神秘。
def my_function(arg_1=None, arg_2=0): determination = arg_1 if arg_1 else arg_2 if arg_2 else 'no arguments given!' print(determination) return determination
过多重复此语法被认为是不好的样式,否则单行就可以了。缺点是,它
是 一个有点重复。
or
表达方式
基本情况,
x ory返回
x如果
bool(x)求值
True,否则它计算
y,(见供参考的文档)。因此,一系列
or表达式具有返回计算的第一个项目
True或最后一个项目的效果。
例如
'' or [] or 'apple' or () or set(['banana'])
返回
'apple',第一个评估为的项目
True,以及
'' or [] or ()
返回
(),即使它的值为
False。
扩展and
使用
为了便于比较,
x and y回报率
x,如果
bool(x)计算结果为
False,否则返回
y。
and当您考虑到条件
and序列中的所有条件都需要评估
True以使控制流沿着该路径前进时,以这种方式工作是有意义的,并且当您遇到一个条件序列时,继续评估那些项目是没有意义的那就是
False。
and用于分配的实用程序并不像using那样明显
or,但在历史上曾被用于三元分配。也就是说,在此更清晰直接的构造可用之前:
a = x if condition else y
与布尔运算符形成的等效项是:
a = condition and x or z# don't do this!
尽管其含义是基于对Python
and和
or评估的全面理解而得出的,但其可读性不及三元条件,因此最好完全避免。
结论
必须谨慎使用布尔表达式进行赋值。
绝对不要将其
and用于分配,这很容易引起错误,很容易混淆。样式专家会发现
orfor赋值的使用不太可取(比更冗长的三元
if条件
else),但是我发现它在专业的Python社区中是如此普遍,以至于它是惯用的。
如果您选择使用它,请谨慎行事,要理解到final元素(无论达到什么值)将始终返回而不管其评估如何,因此,final元素可能应该是一个 文字
,这样您就知道您拥有一个很好的默认后备为您的变量。



