Python-언패킹

강현구·2021년 11월 24일
0

Python

목록 보기
5/21

- List Unpacking

다음과 같이 값을 출력하는 함수가 있다.

>>> def print_nums(a, b, c):
        print(a)
        print(b)
        print(c)

이 함수를 사용할 때, a,b,c에 각각 인수를 대입시키게 된다.
인수를 순서대로 대입할 경우에는 리스트나 튜플을 사용할 수 있다.
리스트 또는 튜플의 앞에 *(애스터리스크)를 붙여 함수에 넣어주면 된다.

>>> x = [10, 20, 30]
>>> print_numbs(*x)
10
20
30

이렇게 리스트나 튜플 앞에 *를 붙이면 언패킹 되어서 값이 순서대로 대입된다.
단, 함수의 매개변수 개수와 리스트 요소 개수가 동일해야 한다.

- 가변 인수 함수

def 함수이름(*매개변수):
    코드

함수를 정의할 때 매개변수 자리의 앞에 *를 붙이면 인수의 개수가 정해지지 않은 함수를 만들 수 있다.
즉, 인수가 1개나 2개일수도 10개일수도 있고 0개도 가능하다.
매개변수의 이름은 관례적으로 *args로 붙이고, args는 튜플이기 때문에 for문으로 반복할 수 있다.

고정 인수와 가변 인수를 같이 사용할 경우, 고정 인수를 먼저 적어주고, 그 뒤에 가변 인수를 작성한다.

>>> def print_nums(a, *args):
        print(a)
        print(args)

Dictionary Unpacking

리스트처럼 딕셔너리도 언패킹할 수 있다.
딕셔너리는 앞에 **를 붙여 언패킹할 수 있다.
단, 딕셔너리의 키는 문자열 형태여야하며, 매개변수의 이름과 같아야한다.

>>> def personal_info(name, age, address):
        print('이름: ', name)
        print('나이: ', age)
        print('주소: ', address)
   
>>> x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
>>> personal_info(**x)
이름:  홍길동
나이:  30
주소:  서울시 용산구 이촌동

또한 딕셔너리도 가변인수(kwargs)로 사용할 수 있다.

>>> def personal_info(**kwargs):
        for kw, arg in kwargs.items():
            print(kw, ': ', arg, sep='')
   
>>> x = {'name': '홍길동'}
>>> personal_info(**x)
name: 홍길동
>>> y = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
>>> personal_info(**y)
name: 홍길동
age: 30
address: 서울시 용산구 이촌동
profile
한걸음씩

0개의 댓글