9

这个问题的答案之一是

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

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

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

4

2 回答 2

15

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

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 的值不必是Trueor False,而是任何表达式,并且将被 Python 的规则解释为布尔值(0、None 和空容器为假,其他一切都为真)。

于 2012-07-15T13:29:53.087 回答
0

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

-- 如果 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 运算符不会检查第二个条件。

于 2020-06-01T12:33:00.907 回答