this question的答案之一是
print len(s)>5 and 'y' or 'n'
print(len(s)>5 and 'y' or 'n') #python3
如果s > 5
的长度,则打印'y'
,否则'n'
。请解释这是如何工作的原因。感谢。
我知道这不是推荐的方法,但我想了解它的工作原理。
答案 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的值不必是True
或False
,而是任何表达式,并且将被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运算符不会检查第二个条件。