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

Python 为什么使用构造x=(条件和A或B)?,python,python-3.x,Python,Python 3.x,答案之一是 如果s>5的长度,则打印'y',否则打印'n'。请解释如何/为什么这样做。谢谢 我知道这不是一种推荐的方法,但我想了解它为什么有效。这是一种老式的黑客方法。新方法是: 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)”为假,因此

答案之一是

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


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

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

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、无和空容器为False,其他所有内容均为True)。

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

--或者,如果第一个条件为真,操作员不检查第二个条件

因此,您的代码首先检查

 len(s)>5 and 'y'
这个返回值为真,它不会检查第二个条件,也不会打印它。 只有当该值变为false时,才会检查第二个或第二个条件。 这印的是“n”

例如:

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

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

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

lol-我的0分答案有一个自己的问题-我解释得太晚了!;-)但是很好的重新规划;-)为了完整性起见,
之前的另一个“hack”可能是值得的,如果。。。否则
语法,过去是
打印{False:'n',True:'y'}(len(s)>5)
(或者甚至只是
{0:'n',1:'y'}
)Meh,没有无意义的黑客的“完整性”。那么
'ny'[len(s)>5]
呢?滥用这种语言的方式是无穷无尽的。重要的是,
A和B
的结果是
B
,如果A和B都计算为true,而不仅仅是
true
。这不一定很明显。@Voo:事实上,如果A是真的ish值,“A和B”将计算为B,而不管B的值是多少。请尝试“打印1和0”
print('a' or 'b')
#Output: a

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