파이썬의 연산자
이 문서는 파이썬의 연산자에 대해 설명합니다.
YouTube Video
파이썬의 연산자
파이썬은 다양한 연산자를 제공하며, 이는 크게 다음과 같이 분류할 수 있습니다. 각 범주에 해당하는 대표적인 연산자를 설명하겠습니다.
산술 연산자
산술 연산자는 숫자 계산을 수행하는 데 사용되는 연산자입니다.
연산자 | 의미 | 예시 |
---|---|---|
+ |
덧셈 | 3 + 2 → 5 |
- |
뺄셈 | 3 - 2 → 1 |
* |
곱셈 | 3 * 2 → 6 |
/ |
나눗셈(항상 부동소수점) | 3 / 2 → 1.5 |
// |
몫 연산(버림 나눗셈) | 3 // 2 → 1 |
% |
나머지(모듈로) | 3 % 2 → 1 |
** |
거듭제곱 | 3 ** 2 → 9 |
1a = 10
2b = 3
3
4print(f"{a} + {b} = {a + b}") # Addition
5print(f"{a} - {b} = {a - b}") # Subtraction
6print(f"{a} * {b} = {a * b}") # Multiplication
7print(f"{a} / {b} = {a / b}") # Division (float)
8print(f"6 / 3 = {6 / 3}") # Division (float)
9print(f"{a} // {b} = {a // b}") # Floor Division
10print(f"{a} % {b} = {a % b}") # Modulo (remainder)
11print(f"{a} ** {b} = {a ** b}") # Exponentiation
- 네 가지 기본 산술 연산자 외에도, 파이썬은 나눗셈(
/
), 정수 나눗셈(//
), 나머지(%
), 거듭제곱(**
) 연산자를 제공합니다. 나눗셈은 정수끼리 계산하더라도 항상 부동소수점 숫자를 반환합니다.
할당 연산자
대입 연산자는 변수에 값을 할당할 때 사용됩니다.
연산자 | 의미 | 예시 |
---|---|---|
= |
대입 | x = 5 |
+= |
더하고 할당 | x += 2 → x = x + 2 |
-= |
빼고 할당 | x -= 2 → x = x - 2 |
*= |
곱하고 할당 | x *= 2 → x = x * 2 |
/= |
나누고 할당 | x /= 2 → x = x / 2 |
//= |
몫 연산(버림 나눗셈) | x //= 2 → x = x // 2 |
%= |
나머지를 할당 | x %= 2 → x = x % 2 |
**= |
거듭제곱을 할당 | x **= 2 → x = x ** 2 |
&= |
AND를 사용하여 할당 | x &= 0b1010 → x = x & 0b1010 |
|= |
OR를 사용하여 할당 | x | = 0b0011 →x = x | 0b0011 |
^= |
XOR를 사용하여 할당 | x ^= 0b0101 → x = x ^ 0b0101 |
<<= |
왼쪽 시프트 후 할당 | x <<= 2 → x = x << 2 |
>>= |
오른쪽 시프트 후 할당 | x >>= 1 → x = x >> 1 |
:= |
할당식(바다코끼리 연산자) | if (n := len(data)) > 10: → 조건을 평가하면서 n에 할당 |
1x = 5 # x = 5
2
3x += 3 # x = x + 3
4x -= 2 # x = x - 2
5x *= 4 # x = x * 4
6x /= 3 # x = x / 3
7x //= 2 # x = x // 2
8x %= 5 # x = x % 5
9x **= 3 # x = x ** 3
10
11x = 0b1100 # x = 0b1100 (12)
12
13x &= 0b1010 # x = x & 0b1010
14x |= 0b0011 # x = x | 0b0011
15x ^= 0b0101 # x = x ^ 0b0101
16x <<= 2 # x = x << 2
17x >>= 1 # x = x >> 1
18
19print(bin(x)) # Display in binary
20print(x) # Display in decimal
21
22# Walrus operator
23if (n := len("hello")) > 3:
24 print(f"Length is {n}")
- 할당 연산자를 사용하면 표준 할당과 다양한 연산자를 결합하여 결과를 한 번에 할당할 수 있습니다.
- 바다코끼리 연산자(
:=
)는 파이썬 3.8 이상에서 사용 가능한 할당식입니다. - 표준 할당은 문(statement)에서만 사용할 수 있지만, 바다코끼리 연산자를 사용하면 식(expression) 내부에서도 할당이 가능합니다.
비교 연산자
비교 연산자는 값을 비교하고 True
또는 False
를 반환합니다.
연산자 | 의미 | 예시 |
---|---|---|
== |
같음 | 3 == 3 → True |
!= |
같지 않음 | 3 != 4 → True |
> |
보다 큼 | 5 > 2 |
< |
보다 작음 | 5 < 2 |
>= |
크거나 같음 | 5 >= 5 |
<= |
작거나 같음 | 3 <= 4 |
1a = 10
2b = 20
3
4# Equal to (==)
5print(f"{a} == {b} -> {a == b}") # False: a and b are not equal
6print(f"3 == 3.0 -> {3 == 3.0}") # True: int and float with the same value are equal
7print(f"3 == '3' -> {3 == '3'}") # False: different types (int vs str)
8print(f"True == 1 -> {True == 1}") # True: True is equivalent to 1
9print(f"False == 0 -> {False == 0}") # True: False is equivalent to 0
10print(f"None == 0 -> {None == 0}") # False: None is not equal to 0
11
12# Not equal to (!=)
13print(f"{a} != {b} -> {a != b}") # True: a and b are not equal
14
15# Greater than (>)
16print(f"{b} > {a} -> {b > a}") # True: 20 > 10
17
18# Less than (<)
19print(f"{a} < {b} -> {a < b}") # True: 10 < 20
20
21# Greater than or equal to (>=)
22print(f"{a} >= 10 -> {a >= 10}") # True: a is greater than or equal to 10
23
24# Less than or equal to (<=)
25print(f"{a} <= 10 -> {a <= 10}") # True: a is less than or equal to 10
- 비교 연산자는 두 값의 크기나 동등성을 비교하고, 그 결과로
True
또는False
를 반환합니다. - 파이썬에서는 서로 다른 데이터 타입을 비교할 때 주의해야 합니다. 일부 타입들은 서로 비교할 수 있지만, 결과가 직관적이지 않을 수 있습니다.
논리 연산자
논리 연산자는 논리 표현을 결합하는 데 사용됩니다.
연산자 | 의미 | 예시 |
---|---|---|
and |
둘 다 True이면 True를 반환합니다 | True and False → False |
or |
둘 중 하나라도 True이면 True를 반환합니다 | True or False → True |
not |
불리언 값을 반전시킵니다 | not True → False |
1x = 10
2print(x > 5 and x < 20) # True
3print(x < 5 or x > 20) # False
4print(not x == 10) # False
and
는 좌우 조건이 모두True
일 때만True
를 반환하는 논리 연산자입니다.or
는 좌우 중 하나라도 조건이True
이면True
를 반환하는 논리 연산자입니다.not
는 조건의 진리값을 반전시키는 논리 연산자입니다. 참이면 거짓이 되고, 거짓이면 참이 됩니다.
논리 연산자의 우선순위
연산자에는 우선순위가 있습니다. 이는 식에서 어떤 연산자가 먼저 계산되는지를 결정하는 규칙입니다. 논리 연산자는 not
, and
, or
순서로 평가됩니다.
1result = True or False and False
2print(result) # True
3
4result = (True or False) and False
5print(result) # False
たとえば、
첫 번째 예시에서 and
가 먼저 평가되어 False and False
는 False
가 되고, 결국 True or False
가 True
가 됩니다. 두 번째 예시처럼 괄호를 사용하여 평가 순서를 바꿀 수도 있습니다.
비트 연산자
비트 연산자는 비트 수준에서 연산을 수행합니다.
연산자 | 의미 | 예시 |
---|---|---|
& |
비트 단위 AND | 5 & 3 → 1 |
| |
비트 단위 OR | 5 | 3 →7 |
^ |
비트 단위 XOR(배타적 OR) | 5 ^ 3 → 6 |
~ |
비트 단위 NOT | ~5 → -6 |
<< |
왼쪽 시프트 | 5 << 1 → 10 |
>> |
오른쪽 시프트 | 5 >> 1 → 2 |
1# Sample code for bitwise operators
2
3# Define two integers
4a = 5 # Binary: 0101
5b = 3 # Binary: 0011
6
7# Bitwise AND
8result_and = a & b # Binary: 0001 -> Decimal: 1
9print(f"{a} & {b} = {result_and}")
10
11# Bitwise OR
12result_or = a | b # Binary: 0111 -> Decimal: 7
13print(f"{a} | {b} = {result_or}")
14
15# Bitwise XOR
16result_xor = a ^ b # Binary: 0110 -> Decimal: 6
17print(f"{a} ^ {b} = {result_xor}")
18
19# Bitwise NOT (inverting bits)
20result_not = ~a # Binary: -(0101 + 1) -> Decimal: -6
21print(f"~{a} = {result_not}")
22
23# Left shift
24shift_left = a << 1 # Binary: 1010 -> Decimal: 10
25print(f"{a} << 1 = {shift_left}")
26
27# Right shift
28shift_right = a >> 1 # Binary: 0010 -> Decimal: 2
29print(f"{a} >> 1 = {shift_right}")
- 비트 단위 AND, OR, XOR, NOT 연산 뿐만 아니라 비트 시프트 연산도 수행할 수 있습니다. 이 연산자들은
&=
와 같은 할당 연산자와 결합하여 사용할 수도 있습니다.
멤버십 연산자
멤버십 연산자는 리스트나 딕셔너리 같은 컬렉션에서 사용됩니다.
1x = [1, 2, 3]
2y = 2
3z = 4
4
5print("y in x : ", y in x) # Result is True
6print("z in x : ", z in x) # Result is False
7
8print("y not in x : ", y not in x) # Result is False
9print("z not in x : ", z not in x) # Result is True
10
11text = "hello world"
12print("'world' in 'hello world' : ", "world" in text) # True
13print("'python' not in 'hello world' : ", "python" not in text) # True
in
연산자는 지정된 값이 리스트나 문자열과 같은 시퀀스 또는 딕셔너리와 같은 컬렉션에 포함되어 있는지 확인할 때 사용됩니다.not in
연산자는 지정된 값이 시퀀스나 컬렉션에 포함되어 있지 않은지 확인할 때 사용됩니다.
식별 연산자
동일성 연산자는 객체의 동일성을 확인합니다.
1x = [1, 2, 3]
2y = x
3z = x.copy()
4
5print("x is y : ", x is y) # Result is True
6print("x is z : ", x is z) # Result is False
7
8print("x is not y : ", x is not y) # Result is False
9print("x is not z : ", x is not z) # Result is True
10
11print("x == y : ", x == y) # Result is True
12print("x == z : ", x == z) # Result is True
is
연산자는 두 객체가 동일한 객체(즉, 같은 메모리 위치를 참조하는지)를 확인합니다.is not
연산자는 두 객체가 서로 다른 객체인지 확인합니다.- 예를 들어
x is y
는 값의 동등성이 아닌 객체 동일성을 확인하기 때문에x == y
와는 다릅니다.
타입 확인
파이썬에서는 isinstance()
함수를 사용하여 값이 특정 타입인지 확인합니다. type()
함수를 사용하여 변수의 정확한 타입을 확인할 수도 있습니다. 이들은 연산자는 아니지만, 타입 확인의 기본적인 메커니즘입니다.
1x = 10
2print(isinstance(x, int)) # True
3
4y = "hello"
5print(isinstance(y, str)) # True
6
7z = [1, 2, 3]
8print(isinstance(z, list)) # True
9
10print(type(10)) # <class 'int'>
11print(type("hello")) # <class 'str'>
12
13print("isinstance(3, int) : ", isinstance(3, int)) # True
14print("type(3) is int : ", type(3) is int) # True
15print("type(True) is bool : ", type(True) is bool) # True
isinstance()
는 객체가 지정한 클래스 또는 그 하위 클래스의 인스턴스인지 확인하는 함수입니다.type()
은 객체의 정확한 타입(클래스)을 반환하는 함수입니다. 엄격한 타입 비교를 하고 싶을 때 주로 사용됩니다.isinstance()
는 상속 관계도 고려하지만,type()
은 정확히 일치하는 경우만 확인합니다.
요약
각 연산자를 사용할 때는 목적과 타입에 따라 적절히 선택해야 합니다. Python은 동적 타입 언어이기 때문에 계산되는 값의 타입에 따라 연산 결과가 달라질 수 있습니다.
위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.