1. *args
args(arguments)는 내가 원하는 여러가지 인자들을 가변인수로 받을 수 있습니다. 값들은 모두 tuple로 저장됩니다.
입력
def print_args(*args): print(args) for x in args: print(x) print_args(100, True, 'leehojun')
출력
(100, True, 'leehojun') 100 True leehojun
2. **kwargs
**kwargs는 딕셔너리로 가변인수를 받을 수 있는 방법입니다. *arg와 마찬가지로 고정인수와 가변인수 함께 쓸 수 있습니다.
args(arguments)는 튜플 형식으로 파라미터를 받는 반면 kwargs(keyworded arguments)는 딕셔너리 형태로 파라미터를 받습니다.
입력
def print_kwargs(a, **kwargs): print(a) print(kwargs) for i in kwargs: print(i) print_kwargs(100, name='leehojun', age='10')
출력
100 {'name': 'leehojun', 'age': '10'} name age
3. *args와 **kwargs 응용
둘 다 사용하는 경우에는 어떻게 될까요? 앞에는 args의 형식으로, 뒤에는 kwargs형식으로 파라미터를 받게되면 정상적으로 작동합니다. 파라미터를 넣을 때 순서를 바꾸거나 혼합하면 에러를 출력합니다.
입력
def print_args_kwargs(*args, **kwargs): print('args:', args) for x in args: print(x) print('kwargs:', kwargs) for x in kwargs: print(x) print(kwargs[x]) print_args_kwargs(100, True, 'leehojun') print('--------') print_args_kwargs(score=100, name='leehojun', age='10') print('--------') print_args_kwargs(100, True, 'leehojun', score=100, name='leehojun', age='10') #print('--------') # print_args_kwargs(100, score=100, True, name='leehojun', 'leehojun', age='10')
출력
args: (100, True, 'leehojun') 100 True leehojun kwargs: {} -------- args: () kwargs: {'score': 100, 'name': 'leehojun', 'age': '10'} score 100 name leehojun age 10 -------- args: (100, True, 'leehojun') 100 True leehojun kwargs: {'score': 100, 'name': 'leehojun', 'age': '10'} score 100 name leehojun age 10
아래 예제는 파라미터의 값을 선언해서 보내는 형식으로 구성되어 있습니다. 예제 뿐만 아니라 다양하게 실습해 보시기 바랍니다.
입력
def print_args_kwargs(*args, **kwargs): print('args:', args) for x in args: print(x) print('kwargs:', kwargs) for x in kwargs: print(x) print(kwargs[x]) inputlist=[100, True, 'leehojun'] inputdic={'score':100, 'name':'leehojun', 'age':'10'} print_args_kwargs(*inputlist) print('--------') print_args_kwargs(**inputdic) print('--------') print_args_kwargs(*inputlist, **inputdic)
출력
args: (100, True, 'leehojun') 100 True leehojun kwargs: {} -------- args: () kwargs: {'score': 100, 'name': 'leehojun', 'age': '10'} score 100 name leehojun age 10 -------- args: (100, True, 'leehojun') 100 True leehojun kwargs: {'score': 100, 'name': 'leehojun', 'age': '10'} score 100 name leehojun age 10
4. 기타 *의 활용 방법
넣으려는 데이터가 변수의 개수보다 많으면 할당이 불가능 합니다. 그러나 앞서 살펴본 것처럼 초과한 데이터를 다 받을 수 있도록 변수 앞에
*
를 사용하면 초과된 데이터를 전부 담을 수 있습니다. 입력
one, two, *three = 1,2,3,4,5 print(one, two, three)
출력
1 2 [3, 4, 5]