[Python] *args, **kwargs 란?

2022. 3. 19. 12:26Python/Python 기초 정리

반응형
*args란?
  • arguments의 줄임말로 인수를 말합니다.
  • 여러 개의 인자를 함수로 받고자 할 때 사용합니다.
  • 꼭 args가 아닌 다른 이름으로 받아도 됩니다. 앞에 *를 붙여주면 복수의 인자를 받습니다.
  • args는 tuple형태로 전달됩니다.
def print_names(*args):
  for name in args:
    print(name)

print('>> 한개의 인자')
print_names('가나다')
print('>> 두개의 인자')
print_names('가나다', '라마바')
print('>> 세개의 인자')
print_names('가나다', '라마바', '사아자')
print('>> 타입 출력')
print(type(args))
# 결과
>> 한개의 인자
가나다
>> 두개의 인자
가나다
라마바
>> 세개의 인자
가나다
라마바
사아자
>> 타입 출력
<class 'tuple'>

**kwargs란?

keyword arguments의 줄임말로 키워드 인수를 말합니다.

키워드=특정값 형태로 호출할 수 있습니다

dict형태로 함수 내부로 전달됩니다.

def print_user(**kwargs):
    print('>>>user_id', kwargs.get('user_id'))
    print('user_name', kwargs.get('user_name'))
    print('user_age', kwargs.get('user_age'))
    print(type(kwargs))


print_user(user_id='3', user_name='가나다')
print_user(user_id='4', user_name='라마바', user_age=29)
# 결과
>>>user_id 3
user_name 가나다
user_age None
<class 'dict'>
>>>user_id 4
user_name 라마바
user_age 29
<class 'dict'>

이용방식

함수에 인수를 전달하는 방식이기 때문에 일반 변수와 같이 사용이 되는 케이스가 많습니다.

일반 변수, *args, **kwargs 순서로 값을 전달해줍니다.

# 정상
print_user(name, *names, **user_info)

# 에러
print_user(name, *names, *ages, **user_info) # *args는 하나만 존재해야한다
print_user(name, *names, **user_info, **users) # **kwargs는 하나만 존재해야한다
print_user(*name, name, **user_info) # *, **는 일반변수 뒤에 존재해야한다
print_user(name, **user_info, *name) # *, ** 순서로 존재해야한다
반응형