Python 함수의 parameter에 관하여
먼저 중요한 것은 아니지만 용어 설명을 하면
Argument : 함수 바깥의 scope에서 함수에 전달 된 인자
Parameter : 함수 안쪽의 scope에서 함수에가 전달 받은 인자
코드로 봐야 이해가 쉽다.
근데 어쨌든 이름만 약간씩 다를 뿐이지 변수들이 pointing하고 있는 것은 똑같다.
그러니 대충 개념만 알아두고 argument, parameter 너무 신경쓰지 말고 call 하자!
어쨌든 알쏭달쏭했던 파이썬 함수의 parameter에 *가 있으면 알쏭달쏭했는데 이번 기회에 공부했고 결과물이 아래있다.
Argument : 함수 바깥의 scope에서 함수에 전달 된 인자
Parameter : 함수 안쪽의 scope에서 함수에가 전달 받은 인자
코드로 봐야 이해가 쉽다.
def func(a, b): << a, b는 parameter
print(a, b)
x= 10y= 20func(x, y) << x, y는 argument
근데 어쨌든 이름만 약간씩 다를 뿐이지 변수들이 pointing하고 있는 것은 똑같다.
그러니 대충 개념만 알아두고 argument, parameter 너무 신경쓰지 말고 call 하자!
어쨌든 알쏭달쏭했던 파이썬 함수의 parameter에 *가 있으면 알쏭달쏭했는데 이번 기회에 공부했고 결과물이 아래있다.
def func(a, b, *c):
print(a, b, c)
# 최소 두 개의 인자(a, b)는 받고 나머지 인자들은 모두 선택적으로 취한다.
def func(a, b=10, *c):
print(a, b, c)
# 최소 한 개의 Positional arg(a)는 무조건 받고 선택적으로 b를 받는다.
# 두 번째 인자는 b에 할당하지만 값이 없으면 b는 자동으로 2가 된다.# b는 디폴트로 냅둔 채 a와 c 배정 하는 것은 불가능하다.
# 이 땐 func(1, 10, ...)와 같이 b를 명시적으로 할당 해주어야 한다.
# func(1, 20, b=3) < 이렇게 해도 안 된다. (b에게 두 개의 값을 가리키라고 하는 것이기 때문)
def func(a, *, b, c):
print(a, b, c)
# 딱 한 개의 Positional arg를 받고 이를 a에 할당한다.
# 그 뒤에 인자를 두 개 더 할당 받는데 이는 반드시 b,c 키워드 인자이다.
# *의 의미는 여기까지가 positional argument끝! 이 뒤부터는 무조건 kwarg이다.# 단, *args의 의미는 positional argument를 take as many as exist.
결론:
* 는 positional arg의 종결자.
*args는 Positional arg를 데리고 올만큼 데리고 와봐.
* 혹은 *args 뒤에 인자들은 keyword argument.
**kwargs는 keyword arg를 데리고 올만큼 데리고 와봐.
단, 이 모든 것들은 파이썬 함수가 인자를 받을 때의 얘기.
*가 Unpacking에 쓰일 때는 얘기가 달라짐
댓글
댓글 쓰기