Python 의 연산자 우선순위

PythonBeginner
지금 연습하기

소개

본 실습에서는 Python 의 연산자 우선순위 (operator precedence) 에 대한 실질적인 이해를 얻게 됩니다. 수학에서와 마찬가지로, Python 은 표현식 내에서 연산이 수행되는 순서를 결정하기 위해 특정 규칙을 따릅니다. 이러한 규칙을 확실히 이해하는 것은 정확하고 예측 가능한 코드를 작성하는 데 필수적입니다.

먼저 기본적인 산술 연산자의 우선순위를 살펴보겠습니다. 그런 다음 거듭제곱 (exponentiation) 및 비교 (comparison) 와 같은 상위 수준 연산자가 계층 구조에 어떻게 포함되는지 확인할 것입니다. 마지막으로, 기본 연산 순서를 재정의하기 위해 괄호 (parentheses) 를 사용하는 방법을 배우게 되는데, 이는 계산을 제어하고 코드 가독성을 향상시키는 데 매우 중요한 기술입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

기본 산술 연산자 우선순위

Python 에서는 표준 수학과 마찬가지로 일부 산술 연산자가 다른 연산자보다 우선순위가 높습니다. 구체적으로, 덧셈 (+) 과 뺄셈 (-) 보다 곱셈 (*) 과 나눗셈 (/) 이 먼저 수행됩니다. 연산자의 우선순위가 같을 경우, 왼쪽에서 오른쪽으로 평가됩니다.

이러한 동작을 관찰해 봅시다. 설정 과정에서 이미 파일을 생성했습니다. 왼쪽의 WebIDE 파일 탐색기에서 ~/project 디렉토리에 있는 operator_precedence.py 파일을 찾아 엽니다.

파일에 다음 코드를 추가합니다.

## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)

이 표현식에는 덧셈, 곱셈, 뺄셈, 나눗셈이 포함되어 있습니다. 연산 순서를 예측해 봅시다.

  1. Python 은 먼저 곱셈을 수행합니다: 4 * 312가 됩니다.
  2. 다음으로 나눗셈을 수행합니다: 10 / 52.0이 됩니다. Python 3 의 일반적인 나눗셈은 항상 부동 소수점 숫자를 결과로 반환한다는 점에 유의하십시오.
  3. 이제 표현식은 10 + 12 - 2.0이 됩니다.
  4. 마지막으로, 왼쪽에서 오른쪽으로 덧셈과 뺄셈을 수행합니다: 10 + 1222가 되고, 22 - 2.020.0이 됩니다.

Ctrl + S를 눌러 파일을 저장합니다. 코드를 실행하려면 WebIDE 에서 터미널을 열고 (Terminal -> New Terminal) 다음 명령을 실행합니다.

python ~/project/operator_precedence.py

터미널에 계산된 결과가 출력되는 것을 볼 수 있습니다.

20.0

출력 결과는 우리의 예측과 일치하며, 이는 덧셈과 뺄셈에 대한 곱셈과 나눗셈의 우선순위를 확인시켜 줍니다.

상위 수준 연산자

Python 의 연산자 계층 구조는 기본적인 산술 연산을 넘어 확장됩니다. 거듭제곱 연산자 (**) 는 곱셈과 나눗셈보다 우선순위가 높습니다. 또한, 모든 산술 연산자는 "보다 큼"(>) 과 같은 비교 연산자보다 우선순위가 높습니다.

이것이 실제로 어떻게 작동하는지 보기 위해 스크립트에 몇 가지 예제를 더 추가해 보겠습니다. ~/project/operator_precedence.py 파일을 수정하여 두 가지 새로운 표현식을 포함시키십시오.

## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)

## Exponentiation has higher precedence than multiplication.
exp_result = 2 * 3 ** 2
print(exp_result)

## Arithmetic operators have higher precedence than comparison operators.
comp_result = 18 > 5 + 10
print(comp_result)

새로운 줄들을 분석해 봅시다.

  1. 2 * 3 ** 2에서 거듭제곱인 3 ** 2가 먼저 계산되어 9가 됩니다. 그런 다음 곱셈 2 * 9가 수행되어 18이 됩니다.
  2. 18 > 5 + 10에서 덧셈인 5 + 10이 먼저 계산되어 15가 됩니다. 그런 다음 비교 18 > 15가 평가되며, 이는 True입니다.

파일을 저장하고 (Ctrl + S) 스크립트를 다시 실행합니다.

python ~/project/operator_precedence.py

터미널에는 이제 세 가지 표현식의 결과가 표시됩니다.

20.0
18
True

이는 Python 이 거듭제곱을 가장 먼저, 그 다음으로 다른 산술 연산을, 마지막으로 비교 연산을 평가한다는 것을 확인시켜 줍니다.

평가 순서 제어를 위한 괄호 사용

Python 의 우선순위 규칙은 일관적이지만, 복잡한 표현식은 읽기 어려울 수 있습니다. 기본 순서를 재정의하거나 단순히 의도를 명확히 하기 위해 괄호 ()를 사용할 수 있습니다. 괄호로 묶인 모든 표현식은 먼저 평가됩니다.

괄호의 효과를 확인하기 위해 이전 예제 중 하나를 수정해 보겠습니다. ~/project/operator_precedence.py 파일 끝에 새로운 표현식을 추가합니다.

## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)

## Exponentiation has higher precedence than multiplication.
exp_result = 2 * 3 ** 2
print(exp_result)

## Arithmetic operators have higher precedence than comparison operators.
comp_result = 18 > 5 + 10
print(comp_result)

## Using parentheses to change the order of evaluation.
forced_result = (10 + 4) * 3
print(forced_result)

새로운 줄인 (10 + 4) * 3을 분석해 봅시다.

  1. 10 + 4가 괄호 안에 있으므로 먼저 평가되어 14가 됩니다.
  2. 그런 다음 곱셈 14 * 3이 수행되어 42가 됩니다.

이는 결과가 22가 되는 10 + 4 * 3과는 다릅니다. 괄호가 결과를 완전히 변경했습니다.

파일을 저장하고 마지막으로 스크립트를 실행합니다.

python ~/project/operator_precedence.py

출력에는 이제 괄호로 묶인 표현식의 결과가 포함됩니다.

20.0
18
True
42

괄호는 엄격하게 필요하지 않을 때조차도 사용하는 것이 좋은 습관입니다. 이는 연산 순서를 명시적으로 만들어 코드 가독성을 높이고 우선순위 오해로 인한 버그 발생 가능성을 줄여줍니다.

요약

본 실습 (lab) 에서 여러분은 Python 의 연산자 우선순위라는 근본적인 개념을 탐구했습니다. 기본적인 산술 연산부터 시작하여 곱셈과 나눗셈이 덧셈과 뺄셈보다 우선순위가 높다는 것을 확인했습니다. 이어서 거듭제곱이나 비교와 같은 다른 연산자들이 계층 구조 내에서 자신만의 위치를 가지고 있음을 배웠습니다.

가장 중요하게는, 평가 순서를 명시적으로 제어하기 위해 괄호를 사용하는 연습을 했습니다. 이 기술은 기능적으로 정확할 뿐만 아니라 다른 사람들이 이해하기 쉽고 명확한 코드를 작성하는 데 필수적입니다. 연산자 우선순위를 숙달함으로써, 여러분은 보다 강력하고 신뢰할 수 있는 Python 프로그램을 작성하는 데 중요한 진전을 이루었습니다.