2013-05-21 3 views
34

私が知る限り、C & C++では、NOT AND & ORの優先順位はNOT> AND> ORです。しかし、これはPythonで同様に動作するようには見えません。私はPythonのドキュメントでそれを検索しようとしましたが、失敗しました(私はちょっと気をつけています)。誰かが私のためにこれをクリアすることはできますか?論理文の優先順位PythonのNOTと&OR

+1

オペレーターの優先順位が、そうではないと思われる場合の例を挙げることができますか? – dodgethesteamroller

答えて

42

に述べたようにorより緊密な結合するandよりタイトに結合します最も低い優先順位から最も高い優先順位まで。行が

  1. ラムダ
  2. 左から右に同じ優先順位とチェーンを有する場合 - そう
  3. 又は
  4. としないで、内
  5. ないX
  6. 、であり、ではありません、<,< =>、> =、!=、==
  7. |
  8. ^
  9. &
  10. < <、>>
  11. +、 - **
  12. *、/、//、%
  13. + X、-X、X〜
  14. x [インデックス]、x [インデックス:インデックス]、x(引数...)、x.attribute
  15. (式...)、[式:]、{キー:値...} 、{式。 ..}

EDIT:、最弱から最強に、間違った優先順位のブール演算子の

+0

これは相対的な順序ですが、どれが優先順位が高いですか? –

+0

おっと、それは私の自己を混乱させました。ありがとう! –

+0

算術演算子よりも優先順位が高い場合、 '**'には脚注にいくつかの例外があることに注意してください。 –

3

優先順位を持っていた以下の通りである:

  1. or
  2. and
  3. not x
  4. is not; not in

演算子が等しい優先順位の評価は、左から右へと進みます。

+0

申し訳ありませんが、あなたの#2は技術的には正しいですが、依然として非常に誤解を招くことです。まず第一に、ドキュメントは変更されていないようです。第2に、あなたの意見#2( 'と'と 'not x'が左から右に評価されていると示唆している)は公式の効果と技術的に同等ですが、単にcond1とcont2ではなくcont2最初はデフォルトです。 – RayLuo

+0

@RayLuoありがとうございましたが、それは_technically_正しいものではありませんでした。私は間違ってレンダリングされた行にそのテーブルの行を分割して意味を付けました。 2.7 docを見て_today_ 'または'と 'と'は_Firefox_ではなく_Opera_を使って同じセルにあるように見えます。 'と'と 'と'の間の優先順位の違いは明白である(例えば、 '1または0と0'と '(1または0)と0')あなたが与える理由。ドキュメンテーションの意味を反映するように答えを修正します。 –

1

C/C++などの十分に確立1(ほぼ)内の他のすべてのプログラミング言語、よりそれらの演算子の優先順位を持っているPython用は良い理由はありません。

あなたはザ・パイソン言語リファレンス、部分6.16でそれを見つけることができます - https://docs.python.org/3/download.htmlから演算子の優先順位、ダウンロード可能(現在のバージョンのため、他のすべての標準の文書を詰めた)、またはこちらのオンラインそれを読む:6.16. Operator precedenceを。

しかし、あなたを誤解させることができ、Pythonで何かまだある:結果andor演算子はTrueまたはFalseから異なるかもしれ - 同じドキュメント内6.11 Boolean operationsを参照してください。

1

andorの優先順位を調べるには、次のテストを実行できます。

まず、orが最初に結合した場合、我々は出力として0を期待

のpythonコンソールで0 and 0 or 1を試してみてください。

私のコンソールでは、1が出力されます。これは、最初にorにバインドする(おそらく式が左から右に評価される)andを意味します。

次に、1 or 0 and 0を試してください。

orandが組み込みの左から右の評価順序と同じにバインドする場合は、0を出力する必要があります。

私のコンソールでは、1が出力されます。それで、は、orより高い優先度を持っていると結論づけることができます。