목차
개요
API reference 나 python에서 제공하는 공식문서 등을 보면 함수나 클래스 등의 인자 부분에 일반적인 인자가 아닌 *args 와 **kwargs 라고 적혀있는 부분을 확인 할 수 있다. 이에 대해서 알아보자
*args
줄임말에 익숙하다면 args = arguments 직역하자면 인자들 이라는 뜻을 가지고 있고 앞에는 별표 ast 기호가 있는 것을 확인 할 수 있다.
파이썬이나 자바, SQL 등에서의 Asterisk * 는 모든것을 뜻하는 의미로 사용이 되는데 예로들어 어떤 모임의 하위에 있는 객체 하나를 호출 할때는 그 객체의 이름을 써야 하지만 모임의 전부를 호출할 때에는 이름 자리에 *을 사용하게 된다. 이와 같은 기능이 있어서 wild card character 이라고도 불린다.
def args_example(*things):
for thing in things:
print(f'{thing}\nfront : {thing[0]} end : {thing[-1]}')
args_example('icecream')
args_example('icecream', 'chicken')
args_example('icecream', 'chicken', 'pizza')
args_example('icecream', 'chicken', 'pizza', 'milkshake')
위처럼 주어진 단어의 앞과 뒤를 출력해내는 함수가 있을때 아래의 4가지 경우처럼 인자가 몇 개가 들어가던지 상관없이 출력을 해낸다.
def args_example(*things):
for thing in things:
print(f'{thing}\nfront : {thing[0]} end : {thing[-1]}')
print(type(things))
args_example('icecream', 'chicken', 'chicken')
혹시나 중복이 되지 않는지 things 의 데이터 타입은 뭔지 궁금하여 각각 출력해보았다.
**kwargs
kwargs 는 keyword argument의 줄임말이다.
키워드 = 특정한 값, 유일값으로 함수를 호출 가능하다.
공식문서를 보면 사전형이라고 나와있다. 따라서 key와 value를 이용할 수 있다.
def args_example(**things):
for key, value in things.items():
print(f'kind : {key} value : {value}')
print(type(things))
args_example(food='chicken', drink='coke', desert='icecream')
사전형처럼 키와 인자를 입력해주고 마찬가지로 **을 통해 여러 세트를 추가해줄수 있다.
예로들어 print의 sep 이나 end 도 print의 **kwargs 이라고 할 수 있다.
아래는 help(print)의 결과값
arg , *args, **kwargs 순서의 위치를 바꿔서 작성하면 정상적으로 작동하지 않는다