这个问题的答案之一是
print len(s)>5 and 'y' or 'n'
print(len(s)>5 and 'y' or 'n') #python3
如果 的长度s > 5
,则'y'
打印,否则'n'
为。请解释这是如何/为什么起作用的。谢谢。
我知道这不是推荐的方法,但我想了解它为什么有效。
这个问题的答案之一是
print len(s)>5 and 'y' or 'n'
print(len(s)>5 and 'y' or 'n') #python3
如果 的长度s > 5
,则'y'
打印,否则'n'
为。请解释这是如何/为什么起作用的。谢谢。
我知道这不是推荐的方法,但我想了解它为什么有效。
这是一个老式的黑客。新方法是:
print 'y' if len(s) > 5 else 'n'
它起作用的原因是因为“A和B”将评估A,如果为真,将评估为B。但如果A为假,则不需要评估B。同样,“C或D”将评估C,如果为假,将继续评估为 D。
所以“A and B or C”与“(A and B) or C”是一样的。如果 A 为真,它将评估 B。如果 A 为假,则“(A 和 B)”为假,因此它将评估 C。
正如 Voo 在评论中指出的那样, A 的值不必是True
or False
,而是任何表达式,并且将被 Python 的规则解释为布尔值(0、None 和空容器为假,其他一切都为真)。
-- 逻辑运算符的优先级从左到右。
-- 如果 first 为 True,OR 运算符不检查第二个条件。
所以你的代码首先检查是否
len(s)>5 and 'y'
这返回 True,它不检查 OR 的第二个条件,因此打印它。只有当它变为假时,才会检查第二个 OR 条件。这将打印“n”。
例如:
print('a' or 'b')
#Output: a
print(False or 'b')
#Output : b
因此,如果 first 为 True,OR 运算符不会检查第二个条件。