본문 바로가기
Study (Data Science)/Python

Unit30. *args / **kwargs (가변인자; Variadic Parameters)

by 콜라찡 2022. 11. 29.

 

인자 Argument에는 두 종류가 있다.

그리고 항상 함수를 실행시키는 인자를 줄 때에는,

positional은 필수조건이므로 무조건 줘야 하고, 앞에 줘야하고,

keyword는 필수가 아니므로 안주면 생략가능하고, positional갯수를 채운 뒤에 줘야한다.

  • Positional arguments : 정해지는 인자 ; first, second
  • Keyword arguments : 키워드로 잡는 인자 ; third, fourth
    • 코드로 보면,
    • def save_ranking(first, second, third=None, fourth=None):
    • ....
    • save_ranking('Alice', 'Bella', 'Mike', fourth = 'Daniel')
    • 이렇게 될 때, Positinal 두개 다 채워서 Mike부터 keyword로 들어가는 구조

하지만, 사람이름이 수천명이거나, 몇명인지 알 수가 없을 때에,,

Positional, Keyword 대신에 가변인자 Variadic 을 쓴다. (like variable parameters)

 

Variadic도 두가지로 나누어 쓴다.

  • args : like positional argument.  (value 형태인것들) -> tuple로 저장
  • kwargs : like keyword argument. (key = value 형태인것들) -> dic으로 저장

 

Astrerisk : *

소위 '별'이라고 불리는 이 친구는 4가지 용법으로 쓰인다.

  • 곱하기, 거듭제곱
  • [리스트]뒤에 써서 리스트 반복확장
    • [a,b] * 3 = [a,b,a,b,a,b]
  • Variadic Argument 사용할 때 
    • 방금 쓴 달리기 ranking의 경우, def save_ranking(*args,**kwargs): 가능
    • 하지만 ave_ranking('Alice', 'Bella', 'Mike', fourth = 'Daniel') 로 실행
  • 컨테이너 타입 데이터(list,tuple,dic)를 unpacking할 때 (포장푸는기능)
    • 컨테이너타입 데이터를 먼저 선언하고,
    • 함수를 만들때 asterisk 인자명을 넣고,
    • 실행할때에도 asterisk 인자를 씀.
    • 그렇게 하면 for문을 돌리거나 items()하지 않았는데도 알아서 요소를 꺼내어 계산
>>> def print_numbers(*args):
...     for arg in args:
...         print(arg)

>>> x = [10, 20, 30]
>>> print_numbers(*x)
10
20
30

list unpacking

 

참고 : https://mingrammer.com/understanding-the-asterisk-of-python/#3-%EA%B0%80%EB%B3%80%EC%9D%B8%EC%9E%90-variadic-parameters%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B3%A0%EC%9E%90-%ED%95%A0-%EB%95%8C

 

파이썬의 Asterisk(*) 이해하기

파이썬은 타 언어에 비해 비교적 연산자 및 연산의 종류가 풍부한 편이다. 특히 파이썬이 지원하는 많은 연산자중 하나인 **Asterisk(*)**는 단순히 곱셈

mingrammer.com

https://scribblinganything.tistory.com/161

 

파이썬 *args, **kwargs 의미와 예제를 통해 이해하기

파이썬 *args, **kwargs 의미와 예제를 통해 이해하기 예제 코드>> def a_func(*args, **kwargs): print(args) print("###########") for key, value in kwargs.items(): print(key) print(value) print("1번 예제") a_func(name='kc') print("") print

scribblinganything.tistory.com

 

728x90

댓글