Python의 ** 연산자는 어떻게 결합될까?
Python 공식 문서에 따르면, 동일한 우선순위 그룹에 속한 연산자들은 기본적으로 왼쪽에서 오른쪽으로 묶여 계산됩니다. 하지만 여기에는 두 가지 예외가 있습니다.
- 비교 연산자: 모두 같은 우선순위를 가지며 왼쪽에서 오른쪽으로 체인(chain) 형태로 평가됩니다.
- 거듭제곱 연산자(**): 오른쪽에서 왼쪽으로 묶여 계산됩니다.
즉, ** 연산자는 오른쪽 결합(right-associative)을 따르는 유일한 산술 연산자입니다.
예시: 2 ** 3 ** 4의 평가 순서
2 ** 3 ** 4 는 다음과 같이 해석됩니다:
(2 ** (3 ** 4))
왼쪽부터 계산하는 것이 아니라, 먼저 오른쪽의 3 ** 4를 계산한 뒤 그 결과로 2를 거듭제곱합니다. 이는 수학에서 지수 표기법(xyz = x(yz))이 오른쪽부터 읽히는 관례와 일치합니다.
실행 예제
다음 코드를 살펴보겠습니다.
print(2 ** 3 ** 0)
이 코드의 출력 결과는 다음과 같습니다.
2
결과 분석:
- 오른쪽부터 평가: 3 ** 0 = 1
- 그다음: 2 ** 1 = 2
만약 ** 연산자가 왼쪽 결합이었다면 (2 ** 3) ** 0 = 8 ** 0 = 1이 되었을 것입니다. 실제 결과가 2라는 점에서 ** 연산자가 오른쪽에서 왼쪽으로 결합된다는 사실을 확인할 수 있습니다.