WeniVooks

검색

견고한 파이썬

연산과 연산자 우선순위

연산자 우선순위는 여러 연산자가 하나의 표현식(expression) 내에 있을 때 어떤 연산자가 먼저 계산되는지를 결정합니다.

연산자의 우선순위는 수학에서의 연산 순서와 유사합니다. 예를 들면, 곱셈과 나눗셈은 덧셈이나 뺄셈보다 우선적으로 수행됩니다.

아래 표에서 순위가 가장 높은 것이 먼저, 순위가 가장 낮은 것이 나중에 연산됩니다.

순위 연산자 기호 설명
1 (값…), {값…}, [값…], {키:값…} 튜플, 셋, 리스트, 딕셔너리 생성
2 x[인덱스], x[인덱스:인덱스], x(인수…), x.속성 리스트와 튜플 인덱싱, 슬라이싱, 함수 호출, 속성 참조
3 await x await 표현식
4 ** 거듭제곱
5 +, -, ~ 부호, 비트 NOT
6 *, /, //, %, @ 곱하기, 나누기, 내림 나눗셈, 나머지, 행렬 곱셈(numpy 등에서 활용)
7 +, - 더하기, 빼기
8 <<, >> 쉬프트 연산
9 & 비트연산 AND
10 ^ 비트연산 OR
11 in, not in, is, is not, <, ≤, >, ≥, ==, != 멤버 연산자, 식별 연산자, 비교 연산자
12 not 논리 부정
13 and 논리 AND
14 or 논리 OR
15 if else 조건부 표현식
16 lambda 람다 표현식
17 := 할당 표현식

이러한 우선순위를 이해하면 코드의 가독성을 높이고 복잡한 수식도 쉽게 분석하고 평가할 수 있습니다.

아래와 같은 경우가 헷갈리는 케이스이니 우선순위가 잘 생각나지 않는다면 프로그래밍을 할 때 괄호()를 이용하여 묶어 에러를 방지하세요.

-2 ** 2 # 출력: -4, -(2 ** 2)
True * True and True + False # 출력: 1 , ((True * True) and (True + False))
# 복합 할당 연산자가 가장 나중입니다! a = 10 a *= 10 + 100 a # 출력: 1100

다만 모든 연산자가 우선순위에 따라 연산되는 것은 아닙니다. 예를 들어, and나 or 연산의 경우 우선순위 보다 왼쪽에서 오른쪽으로 계산됩니다.

0+1*0 and 1/0

위 코드의 경우 우선순위로 따른다면 나누기 연산을 먼저 했어야 합니다. 하지만 and 연산자는 왼쪽에서 오른쪽으로 계산되기 때문에 앞의 결과가 0이므로 뒤의 나누기 연산은 수행되지 않습니다. 참고로 1/0ZeroDivisionError가 발생합니다. 만약 연산자 우선순위대로 연산이 되었다면 ZeroDivisionError가 발생해야 합니다.

{"packages":["numpy","pandas","matplotlib","lxml"]}
5.6 멤버연산5.8 연습문제