ユーザーが望んでいるものではないと言われるのはなぜですか。つまり、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内容でした。true1 and afalseb
この問題の解決策は、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 をターゲットにする必要がある場合に利用できます。