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

파이썬(Python)에서 *(별표)와 **(이중 별표)의 매개변수 활용법 완벽 정리

파이썬에서 함수를 정의할 때 매개변수 앞에 붙는 *(별표)는 단순한 기호가 아니라, 함수가 임의 개수의 인수를 유연하게 받을 수 있도록 해주는 강력한 문법입니다. 별표 하나(*)와 두 개(**)는 각각 다른 용도로 사용되며, 이를 제대로 이해하면 훨씬 유연하고 재사용성 높은 함수를 작성할 수 있습니다.

1. *(단일 별표): 가변 위치 인수(*args) 받기

매개변수 앞에 별표 하나(*)를 붙이면, 함수를 호출하는 쪽에서 전달하는 임의 개수의 위치 인수(positional arguments)튜플(tuple) 형태로 한꺼번에 받을 수 있습니다.

>>> def function(*arg):
...     for i in arg:
...         print(i)

>>> function(1, 2, 3, 4, 5)
1
2
3
4
5

위 예제처럼 호출 시 인수를 몇 개든 전달해도 모두 하나의 튜플 arg에 담겨 처리됩니다. 관례상 이 매개변수의 이름은 *args로 작성하는 것이 일반적입니다.

2. **(이중 별표): 가변 키워드 인수(**kwargs) 받기

매개변수 앞에 별표 두 개(**)를 붙이면, 함수 호출 시 키=값 형태로 전달되는 임의 개수의 키워드 인수(keyword arguments)딕셔너리(dictionary) 형태로 받습니다.

>>> def function(**arg):
...     for i in arg:
...         print(i, arg[i])

>>> function(a=1, b=2, c=3, d=4)
a 1
b 2
c 3
d 4

이 경우 arg는 {'a': 1, 'b': 2, 'c': 3, 'd': 4}와 같은 딕셔너리가 되며, 마찬가지로 관례상 매개변수 이름은 **kwargs로 작성합니다.

3. 대입문에서의 확장 언패킹 (Python 3)

파이썬 3부터는 대입문의 변수에 별표를 붙여 이터러블(iterable)의 확장 언패킹(extended unpacking)을 수행할 수 있습니다. 별표가 붙은 변수에는 나머지 값들이 리스트(list)로 할당됩니다.

>>> a, *b = [1, 2, 3, 4]
>>> a
1
>>> b
[2, 3, 4]

>>> a, *b, c = [1, 2, 3, 4]
>>> a
1
>>> b
[2, 3]
>>> c
4

두 번째 예제처럼 별표 변수가 중간에 위치하면, 첫 번째 값과 마지막 값을 제외한 나머지 요소들이 리스트로 수집됩니다.

핵심 정리

  • *: 함수 정의 시 가변 개수의 위치 인수를 튜플로 수집합니다.
  • **: 함수 정의 시 가변 개수의 키워드 인수를 딕셔너리로 수집합니다.
  • 대입문의 *: 이터러블 언패킹 시 나머지 요소를 리스트로 수집합니다.

이 세 가지 문법을 적절히 조합하면 호출 방식에 유연하게 대응하는 범용 함수를 손쉽게 구현할 수 있습니다.