-
2. Python - 연산자(operator) [ 산술, 할당, 삼항, 비교, 논리, 항등, 멤버, 비트 연산자 ]Python 2023. 5. 11. 10:19728x90
파이썬의 자료형에 대한 정리를 마쳤으니, 이제 연산자에 대해 학습하고자 한다.
# 연산자(Operator)
: 프로그래밍이나 수학에서 사용되는 기호나 기능으로, 값을 조작하거나 계산하기 위해 사용한다.
# 파이썬의 연산자 종류
파이썬의 연산자는 8종류로, 대부분의 언어들이 비슷하게 가지고 있다.
아래 리스트가 파이썬에서 사용되는 연산자의 종류들이다.
- 산술 연산자(Arithmetic Operators)
- 할당 연산자(Assignment Operators)
- 삼항 연산자(Ternary Operator)
- 비교 연산자(Comparison Operators)
- 논리 연산자(Logical Operators)
- 항등 연산자(Identity Operators)
- 멤버 연산자(Membership Operators)
- 비트 연산자(Bitwise Operators)
위 리스트에 있는 연산자를 하나씩 살펴보자.
# 산술 연산자(Arithmetic Operators)
사칙 연산(Elementary arithmetic)에 사용하는 연산자로, 계산을 위해 사용할 수 있는 연산자들이다.
연산자 역할 + 더하기 (ex> print(1+2) # 결과 : 3) - 빼기 (ex> print(5-2) # 결과 : 3) * 곱하기 (ex> print(3*2) # 결과 : 6) / 나누기 중, 몫 (ex> print(3/5) # 결과 : 0.6) % 나누기 중,나머지 (ex> print(5%3) # 결과 : 2) ** 제곱 (ex> print(2 ** 4) # 결과 : 16) // 몫 (소수점 생략) (ex> print(3/5) # 결과 : 0) + 파이썬에선, 0.1 + 0.2 는 0.3이 아니다?
더보기10진수를 사용하고, 이에 익숙한 환경에선 0.1 + 0.2 는 당연히 0.3으로 나와야 하지만,
파이썬에서는 다른 값으로 결과가 나온다.
print(0.1 + 0.2) # 결과 : 0.30000000000000004
이는, 컴퓨터가 무한한 실수를 계산할 수 없기에 발생하는 문제이다.
예시로, 1부터 10까지의 정수는 10개지만, 그 안의 실수는 무한히 존재한다. 컴퓨터는 숫자를 비트로 표현하여 사용하는데, 실수는 정해진 유한개의 비트로 표현할 수 없기에, 실수는 정해진 비트를 최대한 사용하여 나온 근사값으로 표현하기 때문이다.
즉, 결과로 나온 0.30000000000000004 는 0.3을 표현한 근사값이다.
# 할당 연산자(Assignment Operators)
값을 변수에 할당할 때 사용하는 연산자이다. 등호(=)를 기본으로 사용하며, 등호 오른쪽 값을 왼쪽 변수에 할당한다.
( 즉, 흐름은 오른쪽 값을 왼쪽 값으로 보내는 것이다.)
연산자 역할 = 오른쪽 값을 왼쪽 변수에 할당 += 왼쪽 변수와 오른쪽 변수를 더한 후, 재할당 -= 왼쪽 변수와 오른쪽 변수를 뺀 후, 재할당 *= 왼쪽 변수와 오른쪽 변수를 곱한 후, 재할당 /= 왼쪽 변수와 오른쪽 변수를 나눈 후, 재할당 %= 왼쪽 변수와 오른쪽 변수를 나눈 후의 나머지를 재할당 //= 왼쪽 변수와 오른쪽 변수를 나눈 후 소수점 자리를 버린 몫의 값을 재할당 ** = 왼쪽 변수와 오른쪽 변수만큼 제곱한 후, 재할당 + 참고) 비트 연산자와도 함께 사용할 수 있다.
a = 1 a += 3 # 1 + 3 = 4 a -= 1 # 4 - 1 = 3 a *= 2 # 3 * 2 = 6 a /= 2 # 6 / 2 = 3 a %= 2 # 3 % 2 = 1 a //= 1 # 1 // 1 = 1 a ** 3 # 1 ** 3 = 1
# 삼항 연산자(Ternary Operator)
파이썬 2.5 이후 버전부터는 제공하고 있는 연산자이다.
삼항 연산자는 세 개의 피연산자를 가지는 연산자로, 주어진 조건에 따라 값을 선택적으로 반환하는 기능을 가진다.
파이썬의 삼항 연산자는 다른 언어와 약간의 문법 차이가 있다.
일반적인 삼항 연산자 구조 파이썬에서의 삼항 연산자 구조
조건식 ? 참인 경우의 값 : 거짓인 경우의 값참인 경우의 값 if 조건식 else 거짓인 경우의 값 ex> Javascript
let num = 10;
(num % 2 === 0) ? console.log("짝수") : console.log("홀수");ex> python
num = 10;
res = "짝수" if num % 2 == 0 else "홀수"
print(res)삼항 연산자는 적절히 사용되면, 간결한 코드 유지 및 가독성을 높일 수 있는 장점이 있다.
# 비교 연산자(Comparison Operators)
연산자의 좌측과 우측의 값을 비교하는 연산자이다.
이때, 해당 연산자들의 반환값은 참(True) / 거짓(False)이 된다.
주로 조건문(if문)에서 사용되며, 프로그램의 흐름을 제어한다.
연산자 역할 == 두 값이 서로 같다. != 두 값이 서로 같지 않다. > 좌측 값이 더 크다면 < 우측 값이 더 크다면 >= 좌측 값이 더 크거나 같다면 <= 우측 값이 더 크거나 같다면 x = 10 y = 5 x == y # False x != y # True x > y # True x < y # False x >= y # True x <= y # False
# 논리 연산자(Logical Operators)
논리 연산자는 조건을 조합하여 논리적인 판단을 수행할 수 있도록 하는 연사자이다.
조건문, 반복문, 논리적인 판단이 필요한 다양한 프로그래밍 상황에서 사용된다.
연산자 역할 and 좌우 조건문이 모두 참인 경우, 참 or 좌우 조건문 중 하나라도 참인 경우, 참 not 부정 (참인 경우, 거짓 / 거짓인 경우 참) x = 3 y = 5 z = 1 print(x < y and y < z) # True and False -> False print(x < y or y < z) # True or False -> True print(not x < y) # not True -> False
# 항등 연산자(Identity Operators)
좌측 객체와 우측 객체가 동일한 메모리 위치를 참조하는지를 확인하는 연산자이다.
동일한 메모리 위치를 참조한다는 것은, 동일한 위치를 가리킨다는 것으로,
여러 개의 포인터나 참조 변수가 같은 메모리 주소를 굥유하고 있는 상태를 말한다.
연산자 역할 is 두 객체가 동일한 메모리 위치를 참조하는지 확인 (반환값 boolean) is not is 연산자의 반대로 동작. 메모리 위치를 참조하지 않으면 True a = [1, 2, 3, 4] b = [1, 2, 3, 4] c = a # c = [1, 2, 3, 4] print(a == b) # True print(a is b) # False print(a is not b) # True print(a is c) # True print(a is not c) # False
# 멤버 연산자(Membership Operators)
좌측 객체가 우측의 컨테이너 객체의 멤버인지를 확인하는 연산자이다.
즉, 특정 값이 [ 리스트, 튜플, 집합, 딕셔너리, 문자열 ] (컨테이너 객체) 안에 존재하는지 확인하는 연산자이다. (boolean)
a = 1 b = [1, 2, 3, 4, 5] if a in b: print(str(a)+"(이)가 리스트 안에 존재합니다.") # Tip. str()을 사용해 int인 a를 str로 변경하여 출력
# 비트 연산자(Bitwise Operators)
비트 단위로 연산을 수행하는 연산자이다. 이진수(0과 1)를 사용해 각 자릿수를 연산하여 결과를 도출한다.
불필요한 메모리 차지를 줄이고, 최대한 효율적으로 사용하기 위해 해당 연산자를 사용한다.
연산자 역할 & and 연산으로,
두 객체의 이진수의 자릿수를 비교해 둘다 1인 경우 1로 반환한다.| or 연산으로,
두 객체의 이진수의 자릿수를 비교해 하나만 1이여도 1로 반환한다.^ xor 연산으로,
두 객체의 이진수의 자릿수를 비교해 다른 값인 경우 1로 반환한다.~ not 연산으로,
이진수의 각 자릿수를 반전시킨다. (1 -> 0, 0 -> 1)<< shift 연산으로,
이진수의 비트를 왼쪽으로 이동. ( * 2 거듭제곱)>> shift 연산으로,
이진수의 비트를 오른쪽으로 이동. ( / 2 거듭제곱)a = 10 b = 2 # bin()을 사용해 이진수로 변환하기 bin(a) # 'Ob1010' => 2^3 + 2^1 = 10 bin(b) # 'Ob10' => 2^1 = 2 # 비트연산자 사용하기 a & b # 2 bin(a & b) # 'Ob10' a | b # 10 bin(a | b) # 'Ob1010' a ^ b # 8 bin(a ^ b) # 'Ob1000' -> 0010 과 1010을 비교, 이때 다른 값인 경우만 1 반환! ~ a # -11 bin(~a) # '-Ob1011' a << 2 # 40 bin(a << 2) # 'Ob101000' a >> 1 # 5 bin(a >> 1) # 'Ob101'
728x90'Python' 카테고리의 다른 글
3. Python - 문자열 처리(문자열, 문자열 슬라이싱(Slicing), 문자열 함수(function)) (0) 2023.05.12 1. Python - 자료형(Data type) 종류(스칼라, 컨테이너, 시퀀스) 및 주로 사용되는 자료형 (수치, 불, 군집 자료형) (2) 2023.05.10 0. 파이썬(Python)이란? (0) 2023.05.09