에르노트

파이썬 연산자 우선순위 본문

Dev/Python

파이썬 연산자 우선순위

두콩 2018. 4. 24. 11:13

파이썬 연산자 우선순위

파이썬 코드에서 사용되는 연산자는 매우 다양하다. 그러면 이러한 연산자들을 중첩해서 쓸 일도 많이 생기기 마련이고, 어떤 것들을 먼저 계산할지에 대한 사전 논의가 필요할 것이다. 그래서 Python에서는 연산자의 우선순위가 정해져있다. 여기(파이썬 공식사이트)로 들어가면 Operator precedence라고 명시된 연산자 우선순위를 확인할 수 있다. 

 

 

 

표를 유심히 관찰해보면 다음과 같은 결론을 이끌어낼 수 있다. +,- 보다 *, / 연산자가 더 아래칸에 위치한 것으로 보아 우선순위가 높다. 일반적으로 수학에서 곱셈을 먼저 계산하고 덧셈을 생각하는 것과 같은 원리가 그대로 적용되는 것이다. 하지만 같은 +,- 연산자라도, +x, -x 등의 단항으로 쓰일 때는 *보다도 우선순위가 높다. 이러한 규칙들은 비단 파이썬뿐만 아니라 대부분의 프로그래밍 언어에 보편적으로 통용된다.

 

 

한편, 덧셈,뺼셈,곱셈,나눗셈 등을 통틀어 산술 연산자라하는데, 이 산술 연산자들의 우선순위는 비트 연산자나 논리 연산자보다 높다. 논리 연산자는 참/거짓을 다루는 연산자이고(or나 and 등) 비트 연산자는 말그대로 비트를 다룬다.. 비트에 대해서는 따로 포스팅할 기회가 있을 것 같다. 물론 *과 / 처럼 같은 등급의 연산자를 계산할 때는 좌항부터, 즉 프로그래머 입장에서 코드를 적어나가는 순서 그대로 계산한다. 

 

 

 

다양한 형식들을 분류하는 방법 중 하나로 변경가능성(Mutability)를 들 수 있다. 일례로, list형식은 변경가능하지만(Mutable), str형식은 그렇지 않다(Immutable). 리스트 형식의 가변성은 리스트의 각 칸을 차지하는 내용물을 마음대로 바꿀 수 있음을 시사한다. [1, 2, 3]을 [11, 22, 33]으로 바꾸는 것처럼 말이다. str형식 'help'를 'hell' 로 바꾸는 것은 불가능하다는 점에서 차이가 있다. 그러나 쪼개기에 있어서는 변경가능성의 제약이 없다. [1, 2, 3]에서 [1]을 뽑아내듯 'help'에서 'h'를 뽑아낼 수 있다. 이때 사용되는 것이 Slicing 연산자이다. 아래 코드들을 인터랙티브 모드에서 하나씩 입력해보면서 슬라이싱 연사자를 이해할 수 있다.

 

numbers = [3, 5, 7] 

numbers[0:1] 

numbers[:1] 

numbers[1:] 

numbers[:]

 

우선 첫 줄은 할당문으로 리스트를 정의한다. 두번째 줄부터 Slicing 연산자가 사용되는데, : 이 바로 그것이다. 0:1 은 0번째부터 1번째로 슬라이싱(분할)하겠다는 뜻이다. 이렇게하면 0번째 이상 1번째 미만의 칸만으로 새로운 리스트 형식이 만들어진다. 그래서 출력은 [3] 이라고 나오면 정상이다. 세번째 줄은 두번째 줄과 동치이다. 앞 index를 생략할 경우 자동으로 0번째부터라고 간주되기 때문이다. 역으로 네번째 줄은 뒤 index를 생략한 경우인데, 끝까지(길이번째 미만)로 간주된다. 마지막 줄에선 앞뒤 index가 모두 생략되었고, 셋째줄과 넷째줄이 조합되었으니 0번째부터 길이번째 미만, 다시말해 처음부터 끝까지가 된다. 쉽게 말해 원래 리스트의 모든 내용을 그대로 옮겨서 새로운 리스트를 만드는, 일종의 리스트 복사인 셈이다. 이렇게 생성된 numbers[:]는 numbers랑은 다른 id를 가지는 사본으로, 원본과는 확연히 구별된다.

 

 

Comments