我无法理解以下内容:
result = (status!=None and "off" or "on")
现在调用它时,只为status
分配了一个值(正则表达式搜索的结果)。但是,在此命令之后,result
取值为“on”或“off”。
对于我未经训练的眼睛,这只是一个比较。这项任务是如何发生的?
答案 0 :(得分:7)
表达式
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
如果status
是None
; "off"
否则整个表达式(status != None and "off") or "on"
的计算结果为:
"on"
如果status
是None
; "off"
否则。可以说更多Pythonic写这句话的方式是:
result = "on" if status is None else "off"