파이썬의 연산자

파이썬의 연산자

이 문서는 파이썬의 연산자에 대해 설명합니다.

YouTube Video

파이썬의 연산자

파이썬은 다양한 연산자를 제공하며, 이는 크게 다음과 같이 분류할 수 있습니다. 각 범주에 해당하는 대표적인 연산자를 설명하겠습니다.

산술 연산자

산술 연산자는 숫자 계산을 수행하는 데 사용되는 연산자입니다.

연산자 의미 예시
+ 덧셈 3 + 25
- 뺄셈 3 - 21
* 곱셈 3 * 26
/ 나눗셈(항상 부동소수점) 3 / 21.5
// 몫 연산(버림 나눗셈) 3 // 21
% 나머지(모듈로) 3 % 21
** 거듭제곱 3 ** 29
 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 += 2x = x + 2
-= 빼고 할당 x -= 2x = x - 2
*= 곱하고 할당 x *= 2x = x * 2
/= 나누고 할당 x /= 2x = x / 2
//= 몫 연산(버림 나눗셈) x //= 2x = x // 2
%= 나머지를 할당 x %= 2x = x % 2
**= 거듭제곱을 할당 x **= 2x = x ** 2
&= AND를 사용하여 할당 x &= 0b1010x = x & 0b1010
|= OR를 사용하여 할당 x | = 0b0011x = x | 0b0011
^= XOR를 사용하여 할당 x ^= 0b0101x = x ^ 0b0101
<<= 왼쪽 시프트 후 할당 x <<= 2x = x << 2
>>= 오른쪽 시프트 후 할당 x >>= 1x = 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 == 3True
!= 같지 않음 3 != 4True
> 보다 큼 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 FalseFalse
or 둘 중 하나라도 True이면 True를 반환합니다 True or FalseTrue
not 불리언 값을 반전시킵니다 not TrueFalse
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 FalseFalse가 되고, 결국 True or FalseTrue가 됩니다. 두 번째 예시처럼 괄호를 사용하여 평가 순서를 바꿀 수도 있습니다.

비트 연산자

비트 연산자는 비트 수준에서 연산을 수행합니다.

연산자 의미 예시
& 비트 단위 AND 5 & 31
| 비트 단위 OR 5 | 37
^ 비트 단위 XOR(배타적 OR) 5 ^ 36
~ 비트 단위 NOT ~5-6
<< 왼쪽 시프트 5 << 110
>> 오른쪽 시프트 5 >> 12
 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를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.

YouTube Video