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'
是。請解釋如何/爲什麼這會起作用。謝謝。
據我所知,這不是一個推薦的方法,但我想明白它爲什麼起作用。
答案之一到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'
是。請解釋如何/爲什麼這會起作用。謝謝。
據我所知,這不是一個推薦的方法,但我想明白它爲什麼起作用。
這是一個老式的黑客。新的方法是:
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的值不需要是True
或False
,但是任何表達式,並且將被Python規則解釋爲布爾值(0,無,並且空容器是假的,其他的都是真的)。
大聲笑 - 我的0分答案有一個自己的問題 - 我即將推遲解釋它! ;-)但是很好的eplanation ;-) – 2012-07-15 13:34:27
爲了完整起見,在'if ... else'語法前使用'print {False:'n',True:'y' }(len(s)> 5)'(甚至只是'{0:'n',1:'y'}') – 2012-07-15 13:35:21
呃,沒有無意義的黑客沒有「完整性」。那麼'ny'[len(s)> 5]'呢?濫用語言的方式是無止境的。 – 2012-07-15 13:40:02