[Python] *args와 **kwargs

·2024년 3월 22일

*args

평소 함수를 짜다보면, 다음과 같이 인수의 개수가 고정된 형태로 많이 짰을 것이다.

def  print_product(item):
	print(item)
print_product('coffee',10) # 오류 

기본 인수는 이렇듯 고정된 인자만 받지만, 인자의 개수가 변한다면 어떨까?
아마도 일일이 인자 개수에 맞춰 함수를 새로 만들어줘야 할 것이다.

이를 해결할 수 있는 것이 가변인자이다.
인자에는 *을 쓴다.

def print_product(*args):
	print(args)
    
print_product('coffee','bread') # ('coffee','bread')

이것처럼 자유롭게 인자 개수를 조절할 수 있다.
출력되는 형식은?보다시피 튜플이다.
즉, *args의 리턴 타입은 튜플이다.

꼭 args라는 이름을 써야하나?

args의 이름이 아니어도 된다. 중요한 것은 '*'을 붙이는 것이다.
하지만 관례 상 args를 쓰는게 좋다.

매개변수에서 *의 작성 순서

다음과 같은 두 함수가 있다.

def func1(*values,a,b):
	pass
 
func1(1,2,3,4,5)

def func2(a,b,*values):
	pass
    
func2(1,2,3,4,5) 

두 함수 중 어떤 것이 오류가 날까? 답은 func1이다.
*가 붙으면, 함수 호출 시 해당 순서 이후로 받는 파라미터들을 다 가변인자로 인식한다.

따라서 func1에서 *values는 첫번째부터 마지막 파라미터들을 다 가변인자로 인식하여 a,b가 초기화되지 않아 오류가 난다.

**kwargs

key='value'형태로 인자를 넣어주면 딕셔너리 형태로 변환하는 가변인자

리턴 타입이 딕셔너리다.
예시로 보는게 더 빠르겠다.

def print_food(**kwargs):
	print(kwargs)
  
 print_food(dinner='soup') # {'dinner':'soup'}

즉, 인자에 key=value값을 넣어주면 딕셔너리 반환을 한다.

여기서 중요한 점!
여기서 반환되는 딕셔너리는, key를 쌍 따옴표로 감싸야 제대로 조회가능하다!

profile
풀스택 호소인

0개의 댓글