-
parameter (또는 argument) 앞에 *, ** (아스테리크 = asterisk = 별표) 의미언어/파이썬 & 장고 2016. 6. 23. 18:47
장고 orm이나 파이썬 코드를 보면 *args, **kwargs를 확인할 수 있습니다.
해당 뜻은 어떤 파라미터를 몇개를 받을지 모르는 경우 사용한다 라고 하지만 막연하기 때문에 예를 들어 설명하겠습니다.
*args
*args는 파라미터를 몇개를 받을지 모르는 경우 사용하고 튜플 형태로 전달됩니다.
def test(*args): print(args) test('a','b','c') #결과 ('a', 'b', 'c')
위처럼 argument로 여러 값을 던지고 해당 함수에서 tuple을 사용할 수 있습니다.
dict타입과 같이 변수 자체를 그대로 넘기면 튜플 내에 데이터 1개로 취급됩니다.
def test(*args): print(args) a = {'name': 'a', 'name2': 'b', 'name3': 'c'} test(a) #결과 ({'name3': 'c', 'name': 'a', 'name2': 'b'},)
아래와 같이 dict 변수에 포인터를 붙여서 사용하면 dict 변수내의 키값만 빠져 튜플형태를 이루게 됩니다.
def test(*kwargs): print(kwargs) a = {'name': 'a', 'name2': 'b', 'name3': 'c'} test(*a) #결과 ('name', 'name2', 'name3')
**kwargs
- 파라미터 명을 같이 보낼 수 있고 kwargs는 딕셔너리 형태로 전달됩니다.
def test(**kwargs): print(kwargs) test(name1='a', name2='b', name3='c') #결과 {'name2': 'b', 'name3': 'c', 'name1': 'a'}
만약 이미 dict 형태인 값을 가지고 있고, 해당 함수에 변수 자체를 넘기고 싶을 경우 아래와 같이 합니다.
def test(**kwargs): print(kwargs) a = {'name': 'a', 'name2': 'b', 'name3': 'c'} test(**a) # 결과 {'name': 'a', 'name2': 'b', 'name3': 'c'}