요약

  • 부가적인 변수들을 함수에 사용하기 위해 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 을 반환
  • 안전로직 추가
    • 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 함께 사용

작동 순서

  1. 필수 파라미터는 각 변수에 캡쳐됨
  2. key=value 형태가 나오기 전까지 args에 캡쳐됨
  3. 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')