[python] 파이썬에서 논리 문 NOT AND & OR의 우선 순위

내가 아는 한, C & C ++에서 NOT AND & OR의 우선 순위 시퀀스는 NOT> AND> OR입니다. 그러나 이것은 파이썬에서 비슷한 방식으로 작동하지 않는 것 같습니다. Python 문서에서 검색을 시도했지만 실패했습니다 (조금 참을성이 없네요). 누군가 나를 위해 이것을 해결할 수 있습니까?



답변

연산자 우선 순위 에 대한 문서에 따르면 NOT, AND, OR이 가장 높은 것부터 낮은 것까지입니다.

다음은 가장 낮은 우선 순위에서 가장 높은 우선 순위의 전체 우선 순위 테이블입니다. 행은 동일한 우선 순위와 왼쪽에서 오른쪽으로 연결됩니다.

 0. :=
 1. lambda
 2. ifelse
 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...}


답변

다음 테스트를 수행하여 and및 의 우선 순위를 알아낼 수 있습니다 or.

먼저 0 and 0 or 1Python 콘솔에서 시도하십시오 .

or먼저 바인드 하면 0출력으로 예상 됩니다.

내 콘솔 1에는 출력이 있습니다. 이 수단 and제 어느 바인딩 또는 동등 or(왼쪽에서 오른쪽으로 아마 표현식 평가).

그런 다음 1 or 0 and 0.

만약 orand바인드 똑같이와 내장, 바로 평가하기 위해 왼쪽 우리가 가야 0출력한다.

내 콘솔 1에는 출력이 있습니다. 그리고 우리는 그 결론을 내릴 수 and보다 더 높은 우선 순위를가집니다 or.


답변

not바인딩 엄격한보다 and하는 것보다 더 단단한 결합 or에 명시된 언어 참조


답변

부울 연산자 중 가장 약한 것부터 가장 강한 것까지의 우선 순위는 다음과 같습니다.

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

연산자의 우선 순위가 동일한 경우 평가는 왼쪽에서 오른쪽으로 진행됩니다.


답변

파이썬이 C / C ++를 포함한 (거의) 다른 모든 프로그래밍 언어에서 잘 확립 된 연산자보다 다른 우선 순위 시퀀스 를 가질 이유없습니다 .

당신은 그것을 찾을 수 있습니다 파이썬 언어 참조 , 일부 6.16 -에서 연산자 우선 순위 (현재 버전은 다른 모든 표준 설명서와 함께 포장) 다운로드 https://docs.python.org/3/download.html , 또는 그것을 읽고 온라인 : 6.16. 연산자 우선 순위 .

그러나 여전히 당신을 오해 할 수 파이썬에서 무언가가 다음 결과andor운영자는있을 수 있습니다 다른 에서 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


답변