프로그래밍에서 연산자(Operator)는 구하고자 하는 표현식을 수행할 계산 유형을 지정하는 기호 또는 문자를 의미한다. 파이썬에서 이러한 기능을 하는 연산자는 산술 연산자(Arithmetic Operators), 비교 연산자(Comparison Operators), 할당 연산자(Assignment Operators), 논리 연산자(Logical Operators), 멤버 연산자(Membership Operators), 식별 연산자(Identity Operators)가 있다.
1) 산술 연산자(Arithmetic Operators)
산술연산자는 사칙연산으로 이뤄진 연산자(+: 다하기, -: 빼기, *: 곱하기, /: 나누기, %: 나눈 나머지, **: 자승, //: 나눈 몫)이다.
숫자형 자료 연산
숫자형 자료 연산은 일반적인 사칙연산으로 수학적 수식을 그대로 사용한다.
a = 10
b = 5
c = a + b # 더하기 c = 15
c = a - b # 빼기 c = 5
c = a * b # 곱하기 c = 50
c = a / b # 나누기 c = 2.0
c = a % b # a를 b로 나눴을 때 나머지 c = 0
c = a ** b # a의 b승 c = 100000
c = a // b # a를 b로 나눴을 때 몫 c = 2
문자형 자료 연산
문자열 연산은 덧셈(+)과 곱셈(*)이 가능하다. 하지만 숫자형 자료와 같은 사칙연산이 아니고 덧셈(+)은 문자열 연결, 곱셈(*)은 문자열 반복이다.
s1 = "Py"
s2 = "thon"
s3 = s1+s2 # s1과 s2를 붙임 s3 = "Python"
s4 = s3*3 # s3를 세 번 반복 s4 = "PythonPythonPython"
리스트와 튜블 자료 연산
리스트와 튜플은 문자열 연산처럼 덧셈(+)과 곱셈(*)이 가능하다. 하지만 덧셈(+)은 리스트 또는 튜플을 연결, 곱셈(*)은 리스트 또는 튜플을 반복한다.
# 리스트 자료 연산
list_1 = [1, 3, 4]
list_2 = [1, 2, 3]
list_3 = list_1 + list_2 # list_1과 list_2를 연결 list_3 = [1, 3, 4, 1, 2, 3]
list_4 = list_1*3 # list_1을 세 번 반복 list_4 = [1, 3, 4, 1, 3, 4, 1, 3, 4]
# 튜플 자료 연산
tup_1 = (1, 3, 4)
tup_2 = (1, 2, 3)
tup_3 = tup_1 + tup_2 # tup_1과 tup_2를 연결 tup_3 = (1, 3, 4, 1, 2, 3)
tup_4 = tup_1*3 # tup_1을 세 번 반복 tup_4 = (1, 3, 4, 1, 3, 4, 1, 3, 4)
집합 자료 연산
집합 자료의 연산은 합집합, 교집합, 차집합, 여집합을 수행하고 이를 위해 집합 기호 또는 메서드를 사용한다.
- 합집합(union): 집합 A에 속하거나 B에 속하는 원소로 이루어진 집합( | or .union)
- 교집합(intersection): 집합 A에도 속하고 B에도 속하는 원소로 이루어진 집합(& or .intersection)
- 차집합(difference): A의 원소 중에서 B에 속하지 않는 모든 원소들로 이루어진 집합(- or .difference)
- 여집합(complementary): 집합 A와 B에 속하지 않는 원소들로 이루어진 집합(^, symmetric_difference)
player_1 = {"호날두", "메시", "손흥민"}
player_2 = {"손흥민", "음바페"}
# 합집합 (둘 중 하나라도 가입) : {"호날두", "메시", "손흥민", "음바페")
player_1 | player_2)
player.union(player)
# 교집합 (모두 가입) : {"손흥민"}
player_1 & player_2
player_1.intersection(player_2)
# 차집합 (한 쪽만 가입) : {"호날두", "매시")
player_1 - player_2
player_1.difference(player_2)
# 여집합 (player_1 U player_2) - (player_1 n player_2) : {"호날두", "메시", "음바페"}
player_1 ^ player_2
player_1.symmetric_difference(player_2)
2) 비교 연산자(Comparison Operators)
비교연산자는 대소를 비교하기 위해 사용된다. 같다(==), 같지 않다(!=), 크다(>), 작다(<), 크거나 같다(>=), 작거나 같다(<=)고 표현되며 결과가 참이면 True, 거짓이면 False를 출력한다. 비교연산자는 논리값을 판단하기 향후에 배울 조건문 if 또는 반복문 while과 자주 쓰인다.
a, b = 10, 5 # a에 10, b에 5를 저장
a == b # False 반환
a != b # True 반환
a > b # True 반환
a < b # False 반환
a >= b # True 반환
a <= b # False 반환
3) 할당 연산자(Assignment Operators)
할당 연산자는 산술연산을 시행한 후에 그 값을 다시 할당하는 연산자이다. 표현 방식은 ‘산술연산자(+, -, *, /, %, **, //)=’이며, a += 1 이라고 표현하면 a의 값에 1을 더해서 다시 a에 넣으라는 의미이다. 즉, a=5였다면, a+=1은 5+1 ⇒ a이므로 a=6으로 바뀐다. 이러한 할당 연산자는 계속 늘려가면서 연산이 필요한 향후에 배울 반복문 for에 자주 쓰인다.
a, b = 10, 5
a += b # a(10) + b(5) => a(15)
a -= b # a(15) - b(5) => a(10)
a *= b # a(10) * b(5) => a(50)
a /= b # a(50) / b(5) => a(10)
a %= b # a(10) % b(5) => a(0) (나머지)
a **= b # a(0) ** b(5) => a(0) (0의 5승)
a //= b # a(0) // b(5) => a(0) (몫)
4) 논리 연산자(Logical Operators)
논리 연산자는 논리값(True, False)들을 and와 or, 그리고 not을 이용해 최종 결과(논리값)를 찾아낸다. 연산자 and는 모두 True일 때 True 값을 갖지만, or는 하나만 True여도 True 값이 된다.
a, b = 10, 5
a == b or a != b # False or True => True
a == b and a != b # False and True => False
a > b and a != b # True and True => True
not a//b > b # not(False) => True
5) 멤버 연산자(Membership Operators)
멤버 연산자는 찾고자 하는 객체가 여러 객체를 담고 있는 문자열이나 컨테이너(container) 자료에 있는지를 확인하는 것이다. 표현식은 in과 not in을 사용하며, in은 존재를, not in은 존재하지 않음을 의미한다. 최종 결과는 True와 False라는 논리값으로 반환한다. 멤버 연산자는 반복문 for에서 컨테이너 자료 등 집합적 자료에서 객체를 하나씩 추출할 때 필수적으로 사용된다.
$ 리스트(튜플)에서 할당 연산자 활용
a, b = 10, 5
list_1 = [5, 6, 7]
a in list_1 # 리스트 자료에 존재하지 않음 False
b in list_1 # 리스트 자료에 존재 True
a not in list_1 # 리스트 자료에 존재하지 않음 True
b not in list_1 # 리스트 자료에 존재 False
$ 딕셔너리에서 할당 연산자 활용
lockers = {10:"손흥민", 100:"이강인"} # '손흥민'에게 10번, '이강인'에게 100번 할당
10 in lockers # key 10에 '손흥민'이 있기 때문에 True 반환
5 in lockers # key값 5가 존재하지 않기 때문에 False 반환
6) 식별 연산자(Identity Operators)
식별 연산자는 객체의 메모리 위치와 값이 같은지 다른지를 판단하는 것이다. 표현식은 is와 not is를 사용하고, 최종 결과값은 True와 False 값을 반환한다. 얼핏 보면 비교 연산자 ==와 ≠와 같아보이지만 서로 다른 역할을 한다. 비교연산자 ==는 값이 서로 같음을 의미하지만, is는 객체의 메모리 위치와 값이 같은지를 탐색한다. 식별 연산자의 경우 -5부터 256까지는 비교 연산자와 같은 결과를 내지만. 이 범위를 넘어가면 객체를 메모리에 저장하지 않기 때문에 서로 다른 결과를 반환한다. id()를 사용해 객체 주소를 확인할 수 있다.
# 비교 연산자와 비교(-5 ~ 256)
a, b = 5, 5 # 한 번에 저장하면 저장 위치도 같아짐
a is b # True 반환
a is not b # False 반환
a == b # True 반환
a != b # False 반환
# 비교 연산자와 비교(-5~256 밖의 수)
a = 257
b = 257
a is b # 저장 위치가 달라 False 출력
b == b # 값이 같아서 True 출력
id(a) # 저장 위치: 140150016775408
id(b) # 저장 위치: 140150016776752
# 같은 위치에 저장하는 방법
a, b = 257, 257 # 한 번에 저장하면 저장 위치도 같아짐
a is b # True 반환
a == b # True 반환
id(a) # 저장 위치: 140150016776336
id(b) # 저장 위치: 140150016776336
'파이썬' 카테고리의 다른 글
[ 코랩과 파이썬 ] 6. python 조건문 if, elif, else, 한 줄 if 문 (0) | 2023.01.12 |
---|---|
[ 코랩과 파이썬 ] 5. python 자료 인덱싱 indexing과 슬라이싱 slicing (0) | 2023.01.12 |
[ 코랩과 파이썬 ] 3. python 컨테이너 container 자료: list, tuple, set, dictionary (2) | 2023.01.12 |
[ 코랩과 파이썬 ] 2. python 변수와 스칼라 scalar 자료: 숫자, 문자, 불리언 (2) | 2023.01.12 |
[ 코랩과 파이썬 ] 1. 구글 코랩 Google Colab 으로 파이썬 python 시작 (1) | 2023.01.12 |