본문 바로가기
  • AI 개발자가 될래요
Python

[Python] *args, **kwargs 란 / 함수 파라미터 설정 시 가변 개수 파라미터 설정하는 법

by 꿀개 2024. 1. 15.

[Python] *args, **kwargs 뜻 / 함수 파라미터 설정 시 가변 개수 파라미터 설정하는 법

 

파이썬에서 함수를 선언 시 인수(파라미터, parameter)를 설정해야 한다.

기본적으로는 인수를 0개, 1개, 혹은 그 이상 고정된 개수로 선언하지만,

때에 따라서 1개가 들어올 때도 있고, 3개 이상이 들어올 때도 있을 것이다.

 

이렇게 인수의 개수가 가변적일 때 함수를 선언하는 방법이 있다.

바로 *args, **kwargs를 사용하는 것이다.

 

개수가 변하는 위치 인수, *args의 의미

 

개수가 변하는 인수를 받는 함수는 가인수 이름에 *을 붙여서 정의할 수 있다.

가인수: 함수를 정의할 때 사용하는 인수 ↔ 실인수: 함수를 호출할 때 전달하는 인수

 

이 가인수 이름에는 어떤 이름이 들어가도 상관은 없으나, 관습적으로 *args를 사용한다.

*args는 가인수에 할당되지 않은 위치 인수를 튜플로 받는다.

*args는 다른 위치 인수의 가장 마지막에 선언되어야 한다.

 

예를 들면 다음과 같다.

 

*args를 가인수로 하는 함수의 실인수를 1개만 넣었을 때

 

print_pages 함수를 호출할 때 인수를 'My content'로 1개만 넣는다면

'My content'를 출력하고 끝난다.

뒤에 다른 실인수가 없기 때문에 args는 빈 튜플이므로  for 문은 동작하지 않는다.

 

*args를 가인수로 하는 함수의 실인수를 여러개 넣었을 때

 

그러나 함수에 실인수를 2개 이상 넣는다면

content = 'my content1' 이 되고

*args = ( 'my content2', 'my content3') 가 된다.

그래서 args에 원소가 있기 때문에 for 문이 동작한다.

 

[ 참고 ] 파이썬에서 변수 앞에 붙는 *의 의미

 

파이썬에서 변수 앞에 붙는 *의 의미는 언팩킹(껍질을 벗기는 행위) 이다.

C 등에서 사용하는 포인터와 헷갈리지 않도록 하자.

 

 

개수가 변하는 키워드 인수, **kwargs의 의미

 

개수가 변하는 키워드 인수를 받는 함수는 가인수 이름에 **를 붙여 정의할 수 있다.

이도 동일하게 다른 이름을 사용할 수 있으나, 관습적으로 **kwargs를 사용한다.

**kwargs는 키워드 인수를 딕셔너리로 받으며, 가장 마지막 위치에 선언된다.

 

예시는 다음과 같다.

 

**kwargs를 인수로 갖는 함수 예시

 

이미 가인수로 선언된 content 변수에는 'my content'가 저장되며

그 이상의 인수는 딕셔너리 형태로 **kwargs에 저장된다.

키와 값을 개수 상관 없이 자유롭게 선언할 수 있어 함수의 확장성이 커진다.

 

*args, **kwargs를 같이 사용하기

*args, **kwargs를 같이 사용한다면 어떤 인수의 호출에도 유연하게 대응할 수 있다.

 

*args, **kwargs 같이 사용 함수 예시

 

위치 인수를 가져와서 *args변수에,

키워드 인수를 가져와서 **kwargs 변수에 넣는 것을 확인할 수 있다.

 

* 이 글은  <효율적 개발로 이끄는 파이썬 실천 기술>, 스야마 레이, 제이펍 을 읽으며 작성한 글이다.