首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >'x =y或z‘赋值在Python中做什么?

'x =y或z‘赋值在Python中做什么?
EN

Stack Overflow用户
提问于 2014-02-05 08:00:23
回答 1查看 7K关注 0票数 17

为什么我们在or中看到Python赋值

例如:

代码语言:javascript
复制
def my_function(arg_1=None, arg_2=0):
    determination = arg_1 or arg_2 or 'no arguments given!'
    print(determination)
    return determination

在不带参数的情况下调用时,上述函数将打印并返回'no arguments given!'

Python为什么要这样做,如何才能最好地利用这一功能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-05 08:00:23

"or“表达式在赋值时的作用:

我们有时会在Python语言中看到这样的例子,用来代替具有三元赋值的条件表达式(实际上是it helped inspire the language to add conditional statements)。

代码语言:javascript
复制
x = a or b

如果bool(a)返回False,则将b的值赋给x

条件表达式的相同用例(即三元赋值)

这是一个这样的条件表达式的例子,它完成了同样的事情,但可能没有那么神秘。

代码语言:javascript
复制
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

过多地重复这种语法被认为是不好的风格,否则it's OK for one-liners.的缺点是它有点重复。

or表达式

基本情况是,如果bool(x)计算的结果是True,则x or y返回x,否则返回y (see the docs for reference)。因此,一系列or表达式的效果是返回计算True的第一项或最后一项。

例如

代码语言:javascript
复制
'' or [] or 'apple' or () or set(['banana'])

返回第一项计算结果为True'apple',以及

代码语言:javascript
复制
'' or [] or ()

返回(),即使它的计算结果为False

扩展的and用法

相比之下,如果bool(x)的计算结果为False,则x and y返回x,否则返回y

当您考虑到条件and系列中的所有条件都需要求值为True,控制流才能沿着该路径继续运行,并且当您遇到一个为False的项时,继续计算这些项是没有意义的,这就说明了and是以这种方式工作的。

使用and进行赋值的效用不像使用or那样明显,但它在历史上曾用于三元赋值。也就是说,在这个更清晰、更直接的构造出现之前:

代码语言:javascript
复制
a = x if condition else y

使用布尔运算符形成的等效运算符是:

代码语言:javascript
复制
a = condition and x or z                      # don't do this!

虽然它的含义是基于对Python andor计算的充分理解而派生出来的,但它的可读性远不如三元条件,最好完全避免。

结论

使用布尔表达式进行赋值的必须小心,绝对不会使用and进行赋值,这是非常容易出错的。风格专家会发现使用or进行赋值并不那么可取(比更冗长的三叉树if condition else更好),但我发现它在专业Python社区中非常普遍,可以认为是惯用的。

如果您选择使用它,请谨慎使用,但要知道,如果到达最终元素,则无论其计算结果如何,都将始终返回,因此最终元素可能应该是文字,这样您就知道您的变量有一个很好的默认回退。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21566106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档