python 함수의 인자
Introducing Python 책을 보면서 필요한 내용을 정리한 글이다.
파이썬은 다른 언어에 비해 함수의 인자를 유연하게 처리한다.
파이썬은 다른 언어에 비해 함수의 인자를 유연하게 처리한다.
1. 위치 인자
가장 익숙한 형태이다. 함수 선언에서 지정된 위치에 함수 사용 시 인자를 넣어준다. 각 위치에 맞는 인자를 넣어야만 한다. 그렇지 않다면 의도하지 않은 결과가 나온다.
def menu(wine, entree, dessert): return {'wine': wine, 'entree': entree, 'dessert': dessert} print(menu('chardonnay', 'chicken', 'cake'))print(menu('cake', 'chardonnay', 'chicken'))
{'wine': 'chardonnay', 'entree': 'chicken', 'dessert': 'cake'}
{'wine': 'cake', 'entree': 'chardonnay', 'dessert': 'chicken'}
2. 키워드 인자
위치 인자의 혼동을 피하기 위해 매개변수에 상응하는 이름을 인자에 지정할 수 있다. 호출 시 인자를 정의 순서와 다르게 호출 가능하다.
위치 인자와 키워드 인자 함께 호출한다면 위치 인자가 먼저 와야 한다.
호출 시 대응하는 인자를 제공하지 않는다면 기본값을 사용한다.
기본값이 없는데 대응하는 인자가 없다면 에러가 발생한다.
def menu(wine ='red', entree ='beef', dessert ='tea'): return {'wine': wine, 'entree': entree, 'dessert': dessert} print(menu('chardonnay', entree= 'fish'))
{'wine': 'chardonnay', 'entree': 'fish', 'dessert': 'tea'}
기본 인자값은 함수가 실행될 때 계산되는 것이 아니고 함수를 정의할 때 계산된다.
즉 여러 번 함수 실행이 되더라도 기본 값 생성은 소스 실행 시 한 번만 된다는 의미이다.
리스트나 딕셔너리와 같은 변경 가능한 데이터 타입을 인자로 사용할 때 주의해야 한다.
두 번째 리스트 인자의 초기화는 소스 실행 시 한 번만 되고 이후 함수 호출 시에는 초기화 되지 않기 때문에 리스트 항목이 증가한다.
def test(arg, list =[]): list.append(arg*2) return print(list) test(5) test(6)
[10]
[10, 12]
함수 호출 시 마다 리스트를 초기화 할려면 다음과 같이 해야한다.
def test(arg): list = [] list.append(arg*2) return print(list) test(5) test(6)
[10]
[12]
3. 위치 인자 모으기: *
함수의 매개변수에 *를 사용하면 위치 인자 변수들을 튜플로 묶는다.
def print_args(*args): print('* args print :', args) print_args('a', 1, [1,2,3])
* args print : ('a', 1, [1, 2, 3])
가변 인자를 사용하는 print()와 같은 함수에 매우 유용하게 사용할 수 있다.
def print_args(arg1, arg2, *args): print('1 args print :', arg1) print('2 args print :', arg2) print('other args print :', args) print_args(1,2, 'a', 1000, [1,2,3])
1 args print : 1
2 args print : 2
other args print : ('a', 1000, [1, 2, 3])
* 를 사용할 때 가변 인자의 이름은 관용적으로 args를 사용한다.
4. 키워드 인자 모으기: **
키워드 인자를 딕셔너리로 묶기 위해 ** 를 사용할 수 있다. 인자의 이름은 키, 값은 이 키에 대응하는 딕셔너리 값이다.
def print_args(**kwargs): print('Key word :', kwargs) print_args(wine = 'merlot', entree = 'mutton', dessert = 'macaroon')
Key word : {'wine': 'merlot', 'entree': 'mutton', 'dessert': 'macaroon'}
위치 매개변수와 *args, **kwargs를 혼용하려면 순서대로 배치해야 한다.
종료.
댓글
댓글 쓰기