Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 인플레이스(Inplace) 연산자 vs 표준 연산자 완벽 정리

파이썬의 인플레이스(Inplace) 연산자란?

인플레이스(in-place) 연산이란 복사본을 새로 만들지 않고 기존 변수의 값을 직접 변경하는 연산을 의미합니다. 이러한 연산을 수행하는 데 사용되는 연산자를 인플레이스 연산자라고 부릅니다.

간단한 예시를 통해 살펴보겠습니다.

a = 9
a += 2
print(a)

출력 결과

11

위 예제에서 +=가 바로 인플레이스 연산자입니다. 변수 a에 2를 더한 결과가 다시 a에 저장되면서 기존 값이 직접 갱신됩니다.

이 원리는 다른 연산자에도 동일하게 적용됩니다. 대표적인 인플레이스 연산자는 다음과 같습니다.

  • +=
  • -=
  • *=
  • /=
  • %=

인플레이스 연산은 숫자뿐만 아니라 다른 자료형에도 적용할 수 있습니다.

language = "Python"
language += "3"
print(language)

출력 결과

Python3

즉, x += yx = operator.iadd(x, y)와 동일한 동작을 수행합니다. 참고로 불변(immutable) 타입인 숫자나 문자열의 경우 새 객체가 생성되지만, 리스트 같은 가변(mutable) 타입은 실제로 제자리에서 수정된다는 점이 특징입니다.

operator 모듈의 주요 인플레이스 함수

파이썬의 operator 모듈은 인플레이스 연산을 수행하는 다양한 함수를 제공합니다. 각 함수의 사용법을 하나씩 살펴보겠습니다.

iadd()

현재 값에 더하기를 수행하는 함수로, x += y 연산과 동일합니다.

import operator
x = operator.iadd(9, 18)
print("덧셈 결과 : ", end="")
print(x)

결과

덧셈 결과 : 27

isub()

현재 값에서 빼기를 수행하는 함수로, x -= y 연산과 동일합니다.

x = operator.isub(9, 18)
print("뺄셈 결과 : ", end="")
print(x)

결과

뺄셈 결과 : -9

imul()

현재 값에 곱하기를 수행하는 함수로, x *= y 연산과 동일합니다.

x = operator.imul(9, 18)
print("곱셈 결과 : ", end="")
print(x)

결과

곱셈 결과 : 162

itruediv()

현재 값을 나누기하는 함수로, x /= y 연산과 동일합니다.

x = operator.itruediv(9, 18)
print("나눗셈 결과 : ", end="")
print(x)

결과

나눗셈 결과 : 0.5

imod()

현재 값에 나머지 연산을 적용하는 함수로, x %= y 연산과 동일합니다.

x = operator.imod(9, 18)
print("나머지 연산 결과 : ", end="")
print(x)

결과

나머지 연산 결과 : 9

iconcat()

두 문자열(또는 시퀀스)을 연결하는 함수입니다.

x = "Tutorials"
y = "Point"
str1 = operator.iconcat(x, y)
print("연결 결과 : ", end="")
print(str1)

결과

연결 결과 : TutorialsPoint

ipow()

x **= y, 즉 거듭제곱 연산과 동일한 함수입니다.

x = operator.ipow(2, 6)
print("거듭제곱 결과 : ", end="")
print(x)

결과

거듭제곱 결과 : 64

표준 연산자(Standard Operators)란?

연산자(operator)는 피연산자(operand)의 값을 조작할 수 있는 구문 요소입니다.

예를 들어 9 + 18 = 27이라는 식에서 9와 18은 피연산자이고, +가 연산자입니다.

연산자의 종류

파이썬은 다음과 같은 종류의 연산자를 지원합니다.

  • 산술 연산자: +, -, *, /, %, **, //

  • 비교 연산자: ==, !=, >, <, >=, <=

  • 대입 연산자: =, +=, -=, *=, /=, %=, **=, //=

  • 논리 연산자: and(논리곱), or(논리합), not(논리부정)

  • 비트 연산자: |, &, ^, ~, <<, >>

  • 멤버십 연산자: in, not in

  • 식별 연산자: is, is not

연산자와 함수의 매핑

아래 표는 파이썬 문법의 연산자 기호가 operator 모듈의 어떤 함수와 대응되는지 보여줍니다. 함수형 프로그래밍이나 map(), filter(), sorted()의 key 인자 등에서 유용하게 활용할 수 있습니다.

연산
문법
함수
덧셈
x + y
add(x, y)
연결(Concatenation)
seq1 + seq2
concat(seq1, seq2)
포함 여부 검사
obj in seq
contains(seq, obj)
나눗셈(실수 나눗셈)
x / y
truediv(x, y)
나눗셈(정수 나눗셈)
x // y
floordiv(x, y)
비트 AND
x & y
and_(x, y)
비트 XOR
x ^ y
xor(x, y)
비트 반전(NOT)
~x
invert(x)
비트 OR
x | y
or_(x, y)
거듭제곱
x ** y
pow(x, y)
동일성 검사
x is y
is_(x, y)
동일성 검사(부정)
x is not y
is_not(x, y)
인덱스 할당
obj[k] = v
setitem(obj, k, v)
인덱스 삭제
del obj[k]
delitem(obj, k)
인덱싱
obj[k]
getitem(obj, k)
왼쪽 시프트
a << b
lshift(a, b)
나머지(Modulo)
a % b
mod(a, b)
곱셈
x * y
mul(x, y)
행렬 곱셈
x @ y
matmul(x, y)
산술 음수화
-a
neg(a)
논리 부정
not a
not_(a)
단항 플러스
+a
pos(a)
오른쪽 시프트
a >> b
rshift(a, b)
슬라이스 할당
seq[i:j] = values
setitem(seq, slice(i, j), values)
슬라이스 삭제
del seq[i:j]
delitem(seq, slice(i, j))
슬라이싱
seq[i:j]
getitem(seq, slice(i, j))
문자열 포매팅
s % obj
mod(s, obj)
뺄셈
a - b
sub(a, b)
진위 검사
obj
truth(obj)
크기 비교
a < b
lt(a, b)
크기 비교
a <= b
le(a, b)
동등성 비교
a == b
eq(a, b)
비동등 비교
a != b
ne(a, b)
크기 비교
a >= b
ge(a, b)
크기 비교
a > b
gt(a, b)