Computer Language/Python
함수의 가변인자 *(Asterisk)의 의미
rajent
2020. 11. 28. 16:53
728x90
python에서 *하나붙은 argument는 함수 호출 시 argument의 개수를 가변적으로 입력할 수 있습니다.
def test(\*arg):
for data in arg:
print(data)
이렇게 함수를 선언하고 아래와 같이 두가지 형태로 함수를 호출해봅시다.
test(1,2,3)
test( (1,2), (1,2), (2,1), (2,2) )
결과는 아래와 같이 가변변수 값으로 그대로 출력됩니다.
>>> test(1,2,3)
1
2
3
>>> test( (1,2), (1,2), (2,1), (2,2) )
(1, 2)
(1, 2)
(2, 1)
(2, 2)
**karg는 어떻게 다를까?
*이 두개 붙은 키형 가변변수는 보통 key와 값으로 선언됩니다.
def test2(\*\*karg):
for key, value in karg.items():
print('key : %s, value : %s' % (key, value))
함수를 호출할때는 아래와 같이 key=value 형식으로 argument를 넣어줍니다.
test2(a=1, b=2)
어라? 어디서 많이 본듯한 유형인데..
바로 dict랑 구조가 비슷합니다. 다양한 형태의 dict자료형을 함수내에서 template화해서 처리 가능할 것 같습니다.
test해봅시다. dictionary 자료형을 두가지 형태로 만듭니다.
data1 = {
'a':1,
'b':2,
'c':3
}
data2 = {
'a':1,
'b':(1,2),
'c':{ 'sub1':1, 'sub2':2 }
}
함수를 호출할때는 앞에 **를 꼭 붙여줘야 합니다.
>>> test2(**data1)
key : a, value : 1
key : b, value : 2
key : c, value : 3
>>> test2(**data2)
key : a, value : 1
key : b, value : (1, 2)
key : c, value : {'sub1': 1, 'sub2': 2}
두번째 유형이 어디서 많이 본거죠? 네 맞습니다. json형태입니다.
json형태의 data를 다룰때 가변변수를 사용해서 template화 된 함수를 구현할 수 있습니다.
참고로 Key형 가변변수는 Pyhon3에서만 지원합니다.