1

長い間私を混乱させてきた三項条件演算子についてのちょっとした質問です。

コード例 (python 2.7):

>>> x, y = None, 3
>>> x, y
(None, 3)
>>> (x == None and x or y)
3
>>> (x != None and x or y)
3
>>> (x if x == None else y)

3 行目と 4 行目は古いスタイルの条件演算子です。どちらも同じ結果になります。そして明らかに、前者は「間違った」結果を取ります。多分それはpythonによれば間違っていません。しかし、プログラムで間違いを犯すのは非常に簡単で、明示的なエラーはありません。

5 行目は、本「Core python Programming」(Wesley J. Chun) によると、バージョン 2.5 からの新しいスタイルであり、その戻りは正しいです。

誰かがこれについて何か知っていますか?

4

3 に答える 3

5

3 行目と 4 行目は三項演算子ではありません。これらは、他の演算子を使用して三項演算子をハックしようとする試みですが、ご覧のとおり、実際には機能しません。使用している論理演算子は、条件だけでなく「ブール値の偽性」の概念に依存しているためです。 、ただし、条件に基づいて返したい結果の。実際の三項演算子は正確に追加されたので、そのような偽物を使用する必要はもうありません。

于 2013-05-20T05:14:05.903 に答える
2

これは、この「条件演算子」ハックの既知の問題です。それは動作しません。

x == None=>本当。予想どおり、「and」の部分に進みます。

and x=> false ( xis None、およびNoneis false であるため)。式全体andが false と評価されるため、問題or yが発生します。結果はy

于 2013-05-20T05:13:37.293 に答える
1

それは間違っていません。それは、真実と偽りの価値観が機能する方法です。

(x != None and x or y)は のように評価され、どちらの場合もが偽の場合((x != None) and x) or yに返されます。とは両方なので、短絡は戻ります。yxFalse and FalseTrue and FalseFalseory

and ... or条件がないため、トリックは実際には三項演算子ではありません。or短絡という事実に頼っているだけなので、x != None and x真実であればy評価されません。new-style実際の三項演算子です。

于 2013-05-20T05:14:51.657 に答える