为什么使用构造x =(条件和A或B)?

时间:2012-07-15 13:29:03

标签: python python-3.x

this question的答案之一是

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

如果s > 5的长度,则打印'y',否则'n'。请解释这是如何工作的原因。感谢。

我知道这不是推荐的方法,但我想了解它的工作原理。

2 个答案:

答案 0 :(得分:15)

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

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,无,和空容器是假的,其他一切都是真的。)

答案 1 :(得分:0)

-逻辑运算符的优先级从左到右。

-如果第一个条件为True,则OR运算符不会检查第二个条件。

因此您的代码首先检查

 len(s)>5 and 'y'

这返回True,它不检查OR的第二个条件,因此将其打印出来。 仅当这变为假时,才检查第二个OR条件。 这会显示“ n”。

例如:

print('a' or 'b')
#Output: a

print(False or 'b')
#Output : b

因此,如果第一个条件为True,则OR运算符不会检查第二个条件。