有人可以解释这个条件赋值吗?

时间:2013-01-30 13:53:52

标签: python

我无法理解以下内容:

result = (status!=None and "off" or "on")

现在调用它时,只为status分配了一个值(正则表达式搜索的结果)。但是,在此命令之后,result取值为“on”或“off”。

对于我未经训练的眼睛,这只是一个比较。这项任务是如何发生的?

1 个答案:

答案 0 :(得分:7)

来自documentation

  

表达式x and y首先评估x;如果x为false,则返回其值;否则,将评估y并返回结果值。

     

表达式x or y首先评估x;如果x为真,则返回其值;否则,将评估y并返回结果值。

此外,任何非空字符串在布尔上下文中出现时都被视为“true”。

有了这个,我们可以解决你的问题。

由于运营商优先规则,以下内容:

status != None and "off" or "on"

相当于:

(status != None and "off") or "on"

第一部分status != None and "off"评估为:

  • False如果statusNone;
  • "off"否则

整个表达式(status != None and "off") or "on"的计算结果为:

  • "on"如果statusNone;
  • "off"否则。

可以说更多Pythonic写这句话的方式是:

result = "on" if status is None else "off"