2012-07-15 61 views
9

答案之一到this question为什么使用构造x =(条件和A或B)?

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

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

据我所知,这不是一个推荐的方法,但我想明白它为什么起作用。

回答

15

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

print 'y' if len(s) > 5 else 'n' 

它的工作原理的原因是因为“A和B”会评估,如果这是真的,将评估为B.但如果是假的,它并不需要评估B.类似地,“C或D”将评估C,如果它是假的,则将继续评估为D.因此,“A和B或C”与“(A和B)或C“。如果A为真,则它将评估B.如果A为假,那么“(A和B)”为假,因此它将评估C.由于Voo在评论中指出,A的值不需要是TrueFalse,但是任何表达式,并且将被Python规则解释为布尔值(0,无,并且空容器是假的,其他的都是真的)。

+2

大声笑 - 我的0分答案有一个自己的问题 - 我即将推迟解释它! ;-)但是很好的eplanation ;-) – 2012-07-15 13:34:27

+1

为了完整起见,在'if ... else'语法前使用'print {False:'n',True:'y' }(len(s)> 5)'(甚至只是'{0:'n',1:'y'}') – 2012-07-15 13:35:21

+2

呃,没有无意义的黑客没有“完整性”。那么'ny'[len(s)> 5]'呢?滥用语言的方式是无止境的。 – 2012-07-15 13:40:02

相关问题