윤성우의 열혈 파이썬 (중급)

Story 15. 함수 호출과 매개변수 선언에 있어서 *와 **의 사용 규칙

아린// 2021. 7. 24. 00:57

1. iterable 객체와 매개변수

func(*iterable) iterable 객체를 전달하면서 *을 붙여서 함수를 호출할 때
func(**dict) dict 객체를 전달하면서 **을 붙여서 함수를 호출할 때
def func(*args) 함수를 정의하면서 매개변수 args에 * 붙일 때
def func(**args) 함수를 정의하면서 매개변수 args에 ** 붙일 때 

 

func(*iterable) 리스트, 튜플, 문자열을 풀어서 전달
func(**dict) 딕셔너리의 값을 풀어서 전달

 - 객체를 전달하는 과정에서 언패킹이 진행되는 상황 

 - 리스트, 튜플, 문자열 모두 iterable 객체임 

 

 - func(*iterable)의 형태로 함수를 호출하는 예제

 - who(*[1, 2, 3]) : 리스트를 풀어서 매개변수에 각각 전달

 - who(*(0.1, 0.2, 0.3)) : 튜플을 풀어서 매개변수에 각각 전달 

 - who(*'abc') : 문자열을 풀어서 매개변수에 각각 전달 

 

 - func(**dict)의 형태로 딕셔너리를 전달하는 예제

 - who(*d) : 이렇듯 *을 붙이면 키가 매개변수에 전달됨 

 - who(**d) : 이렇듯 **을 붙이면 값이 매개변수에 전달됨

 

 - 키와 값을 튜플로 묶어서 함수에 전달하기 위한 예제

 - who(*(d.items())) : 이전에 설명했던 items 함수를 호출해서 뷰 객체를 얻음 

 - 뷰 객체도 iterable 객체이므로 *을 붙이는 경우 리스트에 *를 붙이는 경우와 동일한 형태의 결과를 얻게 됨 

 

 

2. 딕셔너리와 매개변수 

def func(*args) 값들이 튜플로 묶여서 args에 전달된다.
def func(**args) 전달되는 내용이 딕셔너리로 묶여서 args에 전달된다. 

 - def func(*args) 형태의 함수 정의가 갖는 의미를 보는 예제

 - 매개변수 선언에 *을 붙이면, 전달되는 값들이 모두 하나의 튜플로 묶여서 매개변수 args에 전달됨 

 - func() : 빈 튜플이 전달되는 형태

 - func(1) : 1이 튜플로 묶여서 전달

 - func(1, 2) : 1과 2가 튜플로 묶여서 전달

 

 - def func(**args) 형태의 함수가 갖는 의미를 보이는 예제

 - 딕셔너리의 생성으로 이어지며, 이 딕셔너리를 구성할 키와 값의 정보를 key = value 형태로 전달해야 함 

 - print(args) : args는 딕셔너리 

 - {'a':1, 'b':2} 생성되어 args에 전달됨