この質問に対する答えの 1 つは、
print len(s)>5 and 'y' or 'n'
print(len(s)>5 and 'y' or 'n') #python3
の長さの場合はs > 5
、'y'
そうでない場合'n'
は出力されます。これがどのように/なぜ機能するのか説明してください。ありがとう。
これが推奨されるアプローチではないことは理解していますが、なぜそれが機能するのかを理解したいと思います。
この質問に対する答えの 1 つは、
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 and B」が A を評価し、true の場合は B に評価されるためです。しかし、A が false の場合、B を評価する必要はありません。同様に、「C or D」は評価されます。 C であり、false の場合は D として評価され続けます。
したがって、「A and B or C」は「(A and B) or C」と同じです。A が true の場合、B を評価します。A が false の場合、「(A and B)」は false であるため、C を評価します。
Voo がコメントで指摘しているように、 A の値はTrue
orFalse
である必要はなく、任意の式であり、Python のルール (0、None、および空のコンテナーは false、その他はすべて true) によってブール値として解釈されます。