私の知る限り、C&C ++では、NOT AND&ORの優先順位はNOT> AND> ORです。しかし、これはPythonでは同じようには機能しないようです。Pythonのドキュメントで検索しようとしましたが、失敗しました(少し焦っていると思います)。誰かが私のためにこれを片付けることができますか?
私の知る限り、C&C ++では、NOT AND&ORの優先順位はNOT> AND> ORです。しかし、これはPythonでは同じようには機能しないようです。Pythonのドキュメントで検索しようとしましたが、失敗しました(少し焦っていると思います)。誰かが私のためにこれを片付けることができますか?
回答:
演算子の優先順位に関するドキュメントによると、最高から最低までではありません。
これが完全な優先順位テーブルで、最低優先順位から最高優先順位までです。行の優先順位は同じで、左から右にチェーンされます
0. :=
1. lambda
2. if – else
3. or
4. and
5. not x
6. in, not in, is, is not, <, <=, >, >=, !=, ==
7. |
8. ^
9. &
10. <<, >>
11. +, -
12. *, @, /, //, %
13. +x, -x, ~x
14. **
14. await x
15. x[index], x[index:index], x(arguments...), x.attribute
16. (expressions...), [expressions...], {key: value...}, {expressions...}
**
算術演算子よりも優先される場合は、脚注にいくつかの例外が記載されていることに注意してください。
**
演算子は算術演算よりも優先されませんが、左側では...たとえば、5*2**2 == 5*(2**2)
。しかし、それを言うのは正しいです2**-1 == 2**(-1)
。
int
リテラルの一部であるように見えるかもしれませんが、それを解析するときast
はそうではありません-オペランドとしてのUnaryOp
withUSub
および1
asです。本当の理由は、それを解析する他の方法がないということです。つまり2**
、バイナリマイナスの正しい左オペランドではありません。したがって、「べき乗優先度の例外」ですが、「右側のみ」です。
あなたはの優先度を把握するために、次の試験を行うことができますand
し、or
。
まず、0 and 0 or 1
Pythonコンソールで試してください
or
最初にバインドする場合0
、出力として期待されます。
私のコンソールで1
は、が出力です。これはand
、最初にバインドするか、等しいことを意味しますor
(式は左から右に評価される可能性があります)。
次に、試してください1 or 0 and 0
。
組み込みの左から右への評価順序or
とand
等しくバインドする場合、0
出力として取得する必要があります。
私のコンソールで1
は、が出力です。次に、それが。and
よりも優先度が高いと結論付けることができor
ます。
((0 and 0) or 1)
と(1 or (0 and 0))
(0 and 0)
がの(exp1 or exp2)
場合、exp1
が直接返されると評価されることはありませんTrue
。同様に、最初の式では、がの場合、and 0
パーツがexp1 and exp2
直接返されるexp1
と評価されることはありませんFalse
。
ブール演算子のうち、最も弱いものから最も強いものへの優先順位は次のとおりです。
or
and
not x
is not
; not in
演算子の優先順位が等しい場合、評価は左から右に進みます。
and
&not x
は左から右に評価されます)は技術的に公式の効果と同等ですが、それは単に「cont2ではなくcond1」の場合、Pythonはデフォルトで最初にcont2を計算する必要があるためです。
or
とand
使って同じセルにあるように見えるFirefoxのではなく、オペラ。間の優先順位の違いor
とはand
明らかである(例えば 1 or 0 and 0
対(1 or 0) and 0
)それとの間and
及びnot x
ませんそんなにあなたが与える理由のために。ドキュメントの実際の内容を反映するように回答を修復します。
Pythonが、C / C ++を含む(ほぼ)他のすべてのプログラミング言語で確立されたもの以外に、これらの演算子の他の優先順位を持つ理由はありません。
あなたにはそれを見つけることはPython言語リファレンスから演算子の優先順位、ダウンロード可能(現在のバージョンのため、他のすべての標準の文書でパック) - 、パート6.16 https://docs.python.org/3/download.html、またはそれを読みますオンラインはこちら:6.16。演算子の優先順位。
しかし、まだあなたを誤解させることができ、Pythonで何かがある:結果のand
とor
事業者であってもよい異なるからTrue
かFalse
-を参照して6.11ブール演算を同じ文書に。
いくつかの簡単な例。演算子の優先順位に注意してください(not、and、or)。人間の解釈可能性を支援するために括弧で囲みます。
a = 'apple'
b = 'banana'
c = 'carrots'
if c == 'carrots' and a == 'apple' and b == 'BELGIUM':
print('True')
else:
print('False')
# False
同様に:
if b == 'banana'
True
if c == 'CANADA' and a == 'apple'
False
if c == 'CANADA' or a == 'apple'
True
if c == 'carrots' and a == 'apple' or b == 'BELGIUM'
True
# Note this one, which might surprise you:
if c == 'CANADA' and a == 'apple' or b == 'banana'
True
# ... it is the same as:
if (c == 'CANADA' and a == 'apple') or b == 'banana':
True
if c == 'CANADA' and (a == 'apple' or b == 'banana'):
False
if c == 'CANADA' and a == 'apple' or b == 'BELGIUM'
False
if c == 'CANADA' or a == 'apple' and b == 'banana'
True
if c == 'CANADA' or (a == 'apple' and b == 'banana')
True
if (c == 'carrots' and a == 'apple') or b == 'BELGIUM'
True
if c == 'carrots' and (a == 'apple' or b == 'BELGIUM')
True
if a == 'apple' and b == 'banana' or c == 'CANADA'
True
if (a == 'apple' and b == 'banana') or c == 'CANADA'
True
if a == 'apple' and (b == 'banana' or c == 'CANADA')
True
if a == 'apple' and (b == 'banana' and c == 'CANADA')
False
if a == 'apple' or (b == 'banana' and c == 'CANADA')
True