9

この質問に対する答えの 1 つは、

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

の長さの場合はs > 5'y'そうでない場合'n'は出力されます。これがどのように/なぜ機能するのか説明してください。ありがとう。

これが推奨されるアプローチではないことは理解していますが、なぜそれが機能するのかを理解したいと思います。

4

2 に答える 2

15

これは昔ながらのハックです。新しい方法は次のとおりです。

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 の値はTrueorFalseである必要はなく、任意の式であり、Python のルール (0、None、および空のコンテナーは false、その他はすべて true) によってブール値として解釈されます。

于 2012-07-15T13:29:53.087 に答える