Python 함수의 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에 쓰일 때는 얘기가 달라짐

댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

2019.05.23 - SQLAlchemy 의 객체 상태 관리 (expire, refresh, flush, commit) 에 관한 이해

2020.02.17 Python의 multiprocessing 중 Pool.map(), chunksize에 관한 내용