2012-07-15 60 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

相關問題