반응형
가변인자 함수는 함수가 몇 개의 인자를 받을지 정해지지 않은 함수입니다.
파이썬에서는 가변인자 함수를 지원하고 있습니다.
C++에도 가변인자 함수를 구현하고 있는데 아래 링크에서 내부 구조를 확인할 수 있습니다.
2014/12/07 - [Programming/C&C++] - 가변 인자(Variable Arguments) 내부 구조
파이썬에서는 가변인자를 받을 때 *을 붙여서 받습니다.
다음과 같이 입력받는 숫자의 개수와 상관없이 합을 구할 수 있는 함수를 만들 수 있습니다.
def sum_all(*args): result = 0 for i in args: result += i return result print(sum_all(1, 2, 3, 4, 5)) print(sum_all(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
결과가 각각 15와 55로 표시되는 것을 확인할 수 있습니다.
함수의 인자명은 args가 아닌 다른 것으로 변경 가능합니다.
가변인자 함수에 리스트 변수 등을 전달할 때는 앞에 *를 추가해야 합니다.
sumList = [1, 2, 3, 4, 5] print(sum_all(*sumList))
직접 전달하는 것과 결과가 동일하게 출력됩니다.
각 인자의 이름과 함께 전달하는 방법도 존재합니다.
def makeURL(**kwlist): myUrl = "http://192.168.1.120/index.php?" for k, v in kwlist.items(): myUrl += k + '=' + v + '&' myUrl = myUrl.rstrip('&') print(myUrl) makeURL(user = 'psychoria', index = '5', page = '10')
함수에서는 딕셔너리 형태로 전달을 받아서 사용할 수 있습니다.
URL을 생성할 때 키, 값 형태로 주소 뒤에 연결하는데 이럴 때 사용할 수 있습니다.
가변인자 함수에 리스트 변수를 전달할 때 *을 추가하는 것처럼 딕셔너리 변수를 전달할 때 **을 추가합니다.
urlList = {'user':'psychoria', 'index':'5', 'page':'10'} makeURL(**urlList)
가변인자 사용시 주의할 점은 변수 형태로 전달할 때는 *이나 **을 반드시 추가해야 된다는 점입니다.
추가하지 않으면 에러가 발생하게 됩니다.
가변인자 함수를 통해 좀 더 유연하게 동작하는 함수 작성이 가능합니다.
반응형
'Programming > Python' 카테고리의 다른 글
2. Django-dashing 커스텀 대시보드 만들기 (0) | 2017.01.30 |
---|---|
1. Django-dashing으로 IoT 대시보드 생성 (2) | 2017.01.24 |
파이썬 데이터 깊은 복사(Deep Copy)와 얕은 복사(Swallow Copy) (0) | 2016.12.27 |
PyCharm으로 파이썬 프로젝트에 virtualenv 적용하기 (4) | 2016.03.07 |
파이썬 pip로 패키지 설치하기 (0) | 2016.03.03 |