내가 아는 한, C & C ++에서 NOT AND & OR의 우선 순위 시퀀스는 NOT> AND> OR입니다. 그러나 이것은 파이썬에서 비슷한 방식으로 작동하지 않는 것 같습니다. Python 문서에서 검색을 시도했지만 실패했습니다 (조금 참을성이 없네요). 누군가 나를 위해 이것을 해결할 수 있습니까?
답변:
연산자 우선 순위 에 대한 문서에 따르면 NOT, AND, OR이 가장 높은 것부터 낮은 것까지입니다.
다음은 가장 낮은 우선 순위에서 가장 높은 우선 순위의 전체 우선 순위 테이블입니다. 행은 동일한 우선 순위와 왼쪽에서 오른쪽으로 연결됩니다.
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
로 USub
와 1
피연산자로. 진짜 이유는 그것을 파싱 할 다른 방법이 없다는 것입니다. 즉 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
if exp1
가 직접 반환되는 것으로 평가되지 않습니다 False
.
부울 연산자 중 가장 약한 것부터 가장 강한 것까지의 우선 순위는 다음과 같습니다.
or
and
not x
is not
; not in
연산자의 우선 순위가 동일한 경우 평가는 왼쪽에서 오른쪽으로 진행됩니다.
and
및 not x
왼쪽에서 오른쪽으로 평가됨)는 공식적인 효과와 기술적으로 동일하지만 단순히 "cond1 and not cont2"에서 파이썬은 기본적으로 cont2를 먼저 계산해야하기 때문입니다.
or
과 and
사용하여 동일한 셀에있는 것으로 표시 파이어 폭스 하지만 오페라 . 사이의 우선 순위의 차이 or
와는 and
분명하다 (예. 1 or 0 and 0
대 (1 or 0) and 0
) 그 사이 and
및 not x
순전히 당신이주는 이유. 문서가 실제로 말하는 내용을 반영하기 위해 내 대답을 고칠 것 입니다.
파이썬이 C / C ++를 포함한 (거의) 다른 모든 프로그래밍 언어에서 잘 확립 된 연산자보다 다른 우선 순위 시퀀스 를 가질 이유 는 없습니다 .
당신은 그것을 찾을 수 있습니다 파이썬 언어 참조 , 일부 6.16 -에서 연산자 우선 순위 (현재 버전은 다른 모든 표준 설명서와 함께 포장) 다운로드 https://docs.python.org/3/download.html , 또는 그것을 읽고 온라인 : 6.16. 연산자 우선 순위 .
그러나 여전히 당신을 오해 할 수 파이썬에서 무언가가 다음 결과 의 and
및 or
운영자는있을 수 있습니다 다른 에서 True
또는 False
- 참조 6.11 부울 연산을 동일한 문서에.
몇 가지 간단한 예; 연산자 우선 순위에 유의하십시오 (and 또는 또는 아님). 인간의 해석을 돕기 위해 괄호를 사용합니다.
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