본문 바로가기

Language/파이썬

[Python] 함수 인자

반응형
[Python] 데코레이터

파이썬으로 작성된 코드를 보다보면 함수 인자에 *args, **kwargs라는 생소한 인자가 들어간다. 이 키워드들이 어떤 것인지, *가 무엇을 의미하는지 확인해본다.

packing/unpacking

packing은 여러 인자를 하나의 값으로 묶어주는 기능이다. 함수 인자의 이름 앞에 *를 붙여주면 된다.

위 코드를 실행하면 아래와 같이 출력된다.

foo1함수의 인자에 1, 2, 3, 4를 전달했으며 함수는 이 값들을 튜플의 형태로 가져온다. 따라서 인자의 갯수에 상관없이 함수를 호출할 수 있다.

unpacking은 packing과 반대로 하나의 값을 여러 인자로 나눈다. 여기서 하나의 값은 리스트, 튜플, 셋, 딕셔너리와 같이 여러 값들을 묶은 자료형을 나타낸다. 이 자료형들이 가진 값들의 원소 하나씩 풀어내는 것이다.

foo2는 4개의 인자를 가진 함수이다. 4개가 원소인 리스트 l을 unpacking하여 foo2를 호출한 것이다.

 

가변 인자

가변인자를 사용하는 함수를 작성해본다.

위의 log함수는 가변인자 values를 사용한다.

가변인자를 사용할 때 제너레이터를 전달할 경우 주의해야한다. 함수 호출시 튜플로 변환해야하기 때문에 인자의 제너레이터를 반복하게 되고 이는 많은 메모리를 소모할 수 있다.

 

키워드 인자

파이썬에서는 함수 호출시 키워드를 사용해 인자를 전달할 수 있다.

함수를 호출할 때 인자의 이름=값 형식으로 인자의 값을 대입할 수 있다.

딕셔너리 자료형을 사용해서도 키워드 전달 방식으로 함수를 호출할 수 있다.

**연산자는 딕셔너리의 값을 함수 인자에 대응하는 키에 대응하여 호출하게 한다.

함수의 인자에 **연산자를 넣으면 아래와 같다.

인자로 딕셔너리를 전달할 때와는 반대로 인자의 **는 호출되는 함수의 키워드 인자를 딕셔너리 형태로 변환해준다.

위에서 살펴본 *args**kwargs를 동시에 사용할 수 있다.

인자 p이외의 인자들은 *args를 통해 튜플 형태로 전달되고, 키워드 인자들은 **kward에서 딕셔너리 형태로 전달된다.

 

Ref

 

반응형

'Language > 파이썬' 카테고리의 다른 글

[Python] GIL  (0) 2021.03.04
[Python] Flask  (0) 2021.01.27
[Python] Pyenv  (0) 2020.03.24
[Python] Visdom  (0) 2020.01.12
[Python] 가상환경 만들기  (0) 2018.10.27