2017-09-10 15 views
2

私はPythonが解析する方法思ったんだけど:(not a) < b < c連鎖比較の優先順位?

とは対照的に、この質問はチェーン対のグループ化について説明し

not (a < b < c) 

Python comparison operators chaining/grouping left to right?が、何

not a < b < c 

としてこれを解釈しているようです連鎖比較の優先順位の規則はありますか?

それはnot<>が同じ優先順位を持っていることを私には奇妙だが、-a < b < c(-a) < b < cとして解析しながらnot a < b < cnot (a < b < c)として解析します。

私はPython 2.7でnot 2 > 1 > 2を評価してこれをテストしました。

+0

'not 2 <1 2'は 'not(2 <1 <2)'として解析されていません。各用語は左から右に処理されます。 'not 2'は数値' 0'と同じ 'False'で、' 0 <1 <2'と等価です。 – martineau

+0

このヒントは既に閲覧されています。可能性があります: https://stackoverflow.com/questions/25753474/python-comparison-operators-chaining-grouping-left-to-right –

+0

「ノー」と思ったのは、「<', and '>」と同じ優先順位ですか? – user2357112

答えて

2

Pythonは何が起こっているのかをお見せするために抽象構文木のモジュールがあります。

import ast 
t = ast.parse('not a < b < c') 
print(ast.dump(t)) 

それは(ビットをクリーンアップ)を与える:

[Expr(value=UnaryOp(
    op=Not(), 
    operand=Compare(
     left=Name(id='a'), 
     ops=[Lt(), Lt()], 
     comparators=[Name(id='b'), Name(id='c')] 
    ) 
))] 

そして実際、documentationnotが低下していることを言います優先度は<です。

+0

@rici:ありがとう、編集済み。 –

+0

ああ私は間違った 'not'を見ていた、ありがとう! – nonagon

関連する問題