2

我无法理解以下行:

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

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

在我未经训练的眼睛看来,这只是一个比较。这个任务是如何进行的?

4

1 回答 1

7

文档中:

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

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

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

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

由于运算符优先级规则,以下内容:

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"
于 2013-01-30T13:57:45.653 回答