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