본문 바로가기
Minding's Programming/Airflow

[Python] 파이썬 함수 파라미터 *args와 **kwargs

by Minding 2024. 7. 22.
728x90
반응형

파이썬의 일반적인 함수 인자

 

보통의 파이썬 함수는 인자(파라미터)를 필요로 하고, 아래와 같이 쓰인다.

def regist(name, sex):
	print(name)
    print(sex)

 

위 함수를 기준으로 봤을 때, 이름과 성별 말고도 추가적인 정보(이메일, 전화번호 등)를 받을 수도 있을 때에는 어떻게 해야할까? 저 함수를 그대로 놓고 추가적인 정보를 제공한다면 에러가 나기 때문에, 수정이 필요하다.

 

*args

 

첫 번째 방법으로는 *args를 사용할 수 있다.

def regist(name, sex, *args):
    print(type(args)) # args는 tuple 형태로 저장됨
    email = args[0] if len(args) >= 1 else None # 부가정보 없는 경우 대비해 None 처리
    p_number = args[1] if len(args) >= 2 else None
    
# 아래 두 경우 모두 에러를 피할 수 있음
regist('min hyeok jeong', 'man')
regist('minding', 'man', 'tlsfk48@gmail.com', '01012345678')

*args를 사용하면, email과 p_number라는 변수가 꼭 들어가지 않아도 해당 함수를 실행할 수 있고, 추가 정보가 들어오는 경우에도 args라는 tuple 형태로 인자를 받을 수 있다.

 

*args는 꼭 해당 형태로 이용하지 않아도 되고, *kk *mail *tech 등 원하는 이름으로 만들 수 있다.

 

 

**kwargs

 

두 번째 방법으로 **kwargs를 사용할 수 있다.

def regist(**kwargs):
    print(type(kwargs)) # kwargs는 딕셔너리 형태
    print(kwargs)
    name = kwargs.get('name') or '' # or의 의미 kwargs 딕셔너리에 name 키 값이 없을 경우 '' 반환
    sex = kwargs.get('sex')
    email = kwargs.get('email')
    

regist(name='minding', sex='woman', email='abc@naver.com')

**kwargs는 키워드 형태의 딕셔너리로 인자를 받는 형태이다.각 변수 별로 인자를 입력받아 딕셔너리 형태로 저장할 수 있다.

 

해당 방법을 사용해 함수를 구성할 경우, 각 변수에 입력된 값을 불러올 때 kwargs[name]과 같이 직접 인덱싱하기 보다는 .get() 메서드를 통해 키값(value)을 불러오는 것이 안전하다. 직접 인덱싱할 경우 해당 키가 없을 때 에러가 날 수 있지만, get() 메서드를 사용할 경우 키값이 없어도 None으로 반환되기 때문이다.

 

 

*args와 **kwargs를 같이 쓰는 방법

 

*args와 *kwargs를 같이 쓸 수 있다. 함수를 실행할 때 key값을 정해주는지의 여부에 따라 인자의 저장 위치가 달라진다.

def regist(name, sex, *args, **kwargs):
...


regist('minding', 'man', 'korea', 'seoul', email = 'ddfd@naver.com', p_number = '01010202010')

위 함수에서 필수 인자인 name과 sex에는 각각의 변수에 저장되고, 필수 인자가 아닌 값인 'korea'와 'seoul'은 args 튜플에 저장된다. 

 

필수 인자가 아니지만 key값이 email, p_number로 지정된 이메일 주소와 전화번호는 kwargs 딕셔너리에 저장된다.

728x90
반응형

댓글