什么是';x=y或z';你用Python做什么? 为什么我们看到Python赋值带有或?
例如:什么是';x=y或z';你用Python做什么? 为什么我们看到Python赋值带有或?,python,boolean,variable-assignment,Python,Boolean,Variable Assignment,例如: def my_function(arg_1=None, arg_2=0): determination = arg_1 or arg_2 or 'no arguments given!' print(determination) return determination 当在没有参数的情况下调用时,上述函数将打印并返回“没有给定参数!” Python为什么要这样做,如何才能最好地利用这一功能?赋值时“或”表达式的作用: 我们有时会在Python中看到这样的例子,
def my_function(arg_1=None, arg_2=0):
determination = arg_1 or arg_2 or 'no arguments given!'
print(determination)
return determination
当在没有参数的情况下调用时,上述函数将打印并返回“没有给定参数!”代码>
Python为什么要这样做,如何才能最好地利用这一功能?赋值时“或
”表达式的作用:
我们有时会在Python中看到这样的例子,用三元赋值代替条件表达式(事实上)
如果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
过多地重复这种语法被认为是不好的风格,否则缺点是它有点重复
或
表达式
基本情况下,x或y
返回x
如果bool(x)
计算True
,否则它计算y
,()。因此,一系列或
表达式的作用是返回计算结果为True
的第一项或最后一项
比如说
'' or [] or 'apple' or () or set(['banana'])
返回'apple'
,第一个计算结果为True的项,以及
'' or [] or ()
返回()
,即使其计算结果为False
扩展的和用法
作为对比,x和y
如果bool(x)
的计算结果为False
,则返回x
,否则返回y
<> P> >代码>和在考虑到条件<代码>和系列中的所有条件都需要评估为<代码>真/ <代码>时,控制流从该路径继续下去,这是有意义的。当你遇到一个False
时,继续评估这些项目是没有意义的
使用和
进行赋值的效用并不像使用或
那样明显,但它在历史上曾用于三元赋值。也就是说,在这一更清晰、更直接的构造出现之前:
a = x if condition else y
使用布尔运算符形成的等效值为:
a = condition and x or z # don't do this!
虽然在充分理解Python和
以及或
求值的基础上,其含义是可推导的,但其可读性不如三元条件,最好完全避免
结论
必须小心使用布尔表达式进行赋值。绝对不要使用和
进行赋值,因为这会造成混淆,很容易出错。风格专家会发现在赋值时使用或
不如使用更详细的三元(if
conditionelse
),但我发现它在专业Python社区中非常常见,可以认为是惯用的
如果您选择使用它,请谨慎使用,并理解如果到达最终元素,无论其计算结果如何,都将始终返回该元素,因此最终元素可能应该是一个文本,这样您就知道您的变量有一个很好的默认回退。回答得很好!我想说的是,你不应该说某个东西的计算结果是真的
还是假的
,而是如果它是真的b=1或2
表示b==1
,但都不是真的
。也许我只是有点迂腐,甚至困惑?显然,我还不够清楚。:)b=1或2
表示它首先计算或
之前的项,如果计算结果为True
(在布尔上下文中),则返回该项。我会尽快在课文中澄清。同时,请查看相关文档:查找以“表达式x或y首先计算x;如果x为真,则返回其值;否则,”…哦,是的,我知道所有这些。我只是在挑剔类型。
a = condition and x or z # don't do this!