요약
- 부가적인 변수들을 함수에 사용하기 위해
args
,kwargs
활용args
객체는 tuple 형태,kwargs
객체는 dictionary 형태- 객체 부여 순서: 필수 파라미터 → args (key-value 형태 전까지) → kwargs(그 외 나머지의 key-value)
1. 일반적인 파이썬 함수 인자
문제점
- 향후 파라미터를 추가할 수 있는 경우 발생
- 부가적인 옵션이 늘어나도 함수를 실행하는데 에러가 나지 않는 방법이 필요
def regist(name, sex):
print(name)
print(sex)
regis('hyun','male')
2. arg 변수
- 부가정보를 입력하기 위해
*args
를 추가함 args
객체는 Tuple 형태로 캡쳐되므로 Index 활용 가능- But! 부가정보가 없는 경우, 인덱싱 오류 발생!
- 따라서, if 조건문과 같은 안전 로직을 추가함 활용하여 인덱싱함
- 다른 이름으로 변수 받기가 가능함
some_func(*kk)
- 필수 파라미터인 외 파라미터가 들어온 경우 사용
def regist(name, sex, *args):
print(type(args))
country = args[0] if len(args) >= 1 else None
city = args[1] if len(args) >=2 else None
regist('hyun', 'male','korea','seoul')
3. kwargs
kwargs
객체느 키워드 argument로 dictionary 형태로 캡쳐되므로 key, value로 호출이 가능함get
함수를 이용한 호출 방법- Why? 기존
dict['key_name']
으로 호출이 가능하지만, key값이 없는 경우 오류 발생함 - 장점: 해당 key가 없는 경우 에러가 아닌
None
을 반환
- Why? 기존
- 안전로직 추가
kwargs.get('name') or ''
을 통해 key가 없는 경우 빈 문자열(''
)을 반환
def some_func(**kwargs):
print(type(kwargs))
print(kwargs)
name = kwargs.get('name') or ''
country = kwargs.get('country') or ''
print(f'name : {name}, country = {country})
some_func(name = 'hyun', country = 'kr')
4. agrs와 kwargs 함께 사용
작동 순서
- 필수 파라미터는 각 변수에 캡쳐됨
- key=value 형태가 나오기 전까지
args
에 캡쳐됨- key=value 형태는
kwargs
에 캡쳐됨
def regist(name, sex, *args, **kwargs):
print(name)
print(sex)
print(args)
print(kwargs)
regist('hyun','male','korea','seoul', phone=010, email = 'hyun@naver.com')