TIL no.17 - Python - Function Parameters

codeamor·2020년 7월 21일
0

Python

목록 보기
3/4

✔️ args

: 가변 인자. (*args)
keyword가 아닌 형태, 정해지지 않은 수의 인자를 받는다.
미정이기 때문에 변수 개수와 상관없이 받아들일 수 있는 인자를 의미한다.
따라서 일반 인자에 해당하는 값부터 함수 호출 인자에서 직접 지정해주지 않은 값 이전까지의 모든 값을 가질 수 있다.

✔️ kwargs

: 가변 키워드 인자 (**kwargs)
keyword가 있는 형태, args와 마찬가지로 정해지지 않은 수의 인자를 받는다.
(dictionary 형태를 가진다.)

def foo(a, b, *args, **kwargs):
    print(a, b, args, kwargs)

foo(2, 9, 12, 34, x=3, name="bob")

>>> 2 9 (12, 34) {'x': 3, 'name': 'bob'}

위 예시에서 args는 12, 34의 값을 가지고
kwargs 는 3, 'bob'의 값을 가진다.

  • 가변 인자, 가변 키워드 인자는 *, ** 뒤의 이름에 종속받지 않는다.
    따라서 다양한 이름으로 쓰일 수 있다.

  • *, ** 표시 없이 평상적으로 쓰이는 인자를 위치 인자라고 한다.



✔️ 예제

에러 해결 # 1


*args 인자가 age에 해당하는 값까지 자신의 인자로 사용하여 에러가 발생했다.
따라서 함수의 인자가 하나 부족하여 에러가 발생했다.

*args 를 맨 뒤로 보냄으로써 위 문제를 해결할 수 있다.
가변 인자 뒤의 일반(위치) 인자가 없기 때문에 에러가 발생하지 않는다.


에러 해결 # 2

**kwargs 인자가 위치 인자 사이에 위치하여 에러가 발생하였다.

**kwargs 인자를 맨 뒤로 옮겨줌으로써 해결할 수 있다.


에러 해결 # 3

함수의 매개변수 순서로 인해 에러가 발생하였다.

위치를 바꿔줌으로써 해결한다.

age는 위치 인자이기 때문에 앞으로 배치한다.

address는 입력값에서 정의되었기 때문에, *arg와 **kwargs 사이 배치

**kwarg는 제일 뒤로 배치한다.

0개의 댓글