ユーザーが望んでいるものではないと言われるのはなぜですか。つまり、1 と "" は False と評価され、"" または b は "second" と評価されます。間違っていますか?
質問のこの部分が無視されているように感じます。condition and if-true or if-false
他の回答で説明されているように、バージョン> 2.5で使用されるトリックで、他の言語condition ? if-true : if-false
またはそれ以降のバージョンを模倣しますif-true if condition else if-false
。
問題は、 ifif-true
が false と評価されるオブジェクト ( ""
、[]
、()
、False
または0
) である場合、評価を見ると予想どおり失敗することですが、if-true
が動的に設定されて評価できる場合、バグとして忍び寄る可能性があります。偽に。
の単純に期待される結果はcondition and a or b
、a
( ""
, 空文字列)の1
内容でした。true
1 and a
false
b
この問題の解決策は、Python 2.5 以降の構文 ( if-true if condition else if-false
) を使用するか、if-true
決して false にならないようにすることです。2 番目を達成する 1 つの方法は、タプルまたはリストでパックすることif-true
ですif-false
。これは、空でない iterable が常に true であるためです。
>>> a = ""
>>> b = "second"
>>> condition = 1
>>> condition and a or b
'second'
>>> condition and [a] or [b]
['']
>>> (condition and [a] or [b])[0]
''
これは一種の見苦しい解決策ですが、古いバージョンの Python をターゲットにする必要がある場合に利用できます。