关于python:为什么使用构造 x = (Condition and A or B) ?

why is the construct x = (Condition and A or B) used?

这个问题的答案之一是

1
2
print len(s)>5 and 'y' or 'n'
print(len(s)>5 and 'y' or 'n') #python3

如果s > 5的长度,则打印'y',否则打印'n'的长度。请解释这是如何工作的/为什么工作的。谢谢。

我知道这不是推荐的方法,但我想知道它为什么有效。


这是一个老式的黑客。新的方法是:

1
print 'y' if len(s) > 5 else 'n'

它起作用的原因是"a和b"将对a进行评估,如果是真的,将对b进行评估。但是如果a是假的,则不需要对b进行评估。同样,"c或d"将对c进行评估,如果是假的,则将继续评估为d。

因此,"A和B或C"与"(A和B)或C"相同。如果a为真,则对b进行计算;如果a为假,则"(a和b)"为假,则对c进行计算。

正如VOO在评论中指出的那样,a的值不必是TrueFalse,而是任何表达式,并且会被python的规则解释为布尔值(0、none和empty containers都是假的,其他都是真的)。