[Python] 가변 인자와 언패킹 활용-2025-01-16

정지은·2025년 1월 16일
0

나머지공부

목록 보기
2/17

Python의 가변 인자와 언패킹 활용


Python에서는 가변 인자와 언패킹을 활용해 더 유연하고 효율적인 코드를 작성할 수 있습니다. 이 글에서는 ***의 역할, 네임드 튜플(namedtuple), 언패킹(unpacking), 그리고 가변 인자 사용법을 정리합니다.


1. 네임드 튜플 (namedtuple)

namedtuple은 일반 튜플과 비슷하지만, 필드 이름으로 접근할 수 있는 데이터 구조입니다.

from collections import namedtuple

# Triangle 네임드 튜플 정의
Tri = namedtuple('Triangle', ['width', 'height'])
t = Tri(3, 7)

# 인덱스로 접근
print(t[0], t[1])  # 출력: 3 7

# 필드 이름으로 접근
print(t.width, t.height)  # 출력: 3 7

# Circle 네임드 튜플 정의
Circle = namedtuple('Circle', ['radius'])
circle = Circle(10)

print(circle[0])  # 출력: 10
print(circle.radius)  # 출력: 10

2. 언패킹(*, **)의 사용

언패킹은 iterable(리스트, 튜플 등) 또는 dictionary를 풀어서 함수에 전달할 때 사용합니다.

2.1 *로 iterable 전달
def who(a, b, c):
    print(a, b, c, sep=",")

# 딕셔너리 정의
d = dict(a=1, b=2, c=3)

# 키만 언패킹 (d의 key만 전달)
who(*d)  # 출력: a,b,c
2.2 **로 dictionary 전달
# 값(value)을 언패킹
who(**d)  # 출력: 1,2,3
2.3 딕셔너리 키와 값 동시 출력
# 딕셔너리의 key와 value 출력
for k, v in d.items():  # [('a', 1), ('b', 2), ('c', 3)]
    print(k, v)

# 키와 값을 함께 언패킹 (오류 발생)
who(*(d.items()))  # 키와 값을 함께 넘길 수 없음

3. 함수 정의에서의 *args, **kwargs

Python에서는 가변 인자를 받을 수 있도록 *args**kwargs를 활용합니다.

3.1 *args: 튜플로 묶어서 받기
def func(*args):  # 인자를 튜플로 묶음
    print(args)

func()           # 출력: ()
func(1)          # 출력: (1,)
func(1, 2, 3)    # 출력: (1, 2, 3)
3.2 **kwargs: 딕셔너리로 묶어서 받기
def func(**kwargs):  # 인자를 딕셔너리로 묶음
    print(kwargs)

func(a=1)              # 출력: {'a': 1}
func(a=1, b=2)         # 출력: {'a': 1, 'b': 2}
func(a=1, b=2, c=3)    # 출력: {'a': 1, 'b': 2, 'c': 3}
3.3 *args**kwargs를 동시에 사용
def func(*args, **kwargs):
    print("args:", args)     # 튜플로 출력
    print("kwargs:", kwargs) # 딕셔너리로 출력

func(1, 2, 3, a=4, b=5)
# 출력:
# args: (1, 2, 3)
# kwargs: {'a': 4, 'b': 5}

4. 기타 언패킹 활용 예시

4.1 단일 튜플 생성
t = (1,)
print(t)  # 출력: (1,)
4.2 여러 값의 언패킹
a, *b, c = 1, 2, 3, 4
print(a)  # 출력: 1
print(b)  # 출력: [2, 3]
print(c)  # 출력: 4

요약

  • namedtuple: 필드 이름으로 데이터에 접근 가능.
  • *args, **kwargs: 가변 인자를 함수에 전달하는 방법.
  • *, **: iterable과 dictionary를 언패킹하여 함수 호출 시 활용.
  • 언패킹은 코드를 간결하고 유연하게 만들어줌.

0개의 댓글