Function Parameters

lentos·2020년 5월 26일
0
post-thumbnail

Function Parameters

함수에서 prameter를 가져오는 기본적인 형태. input 순서대로 parameter들이 함수에 호출된다.

Keyword Arguments

순서에 상관 없이 parameter 이름을 기준으로 input값을 전달하는 방식. 순서가 바뀌어도 정상적으로 parameter가 호출되고 함수에 값을 넘기기 전 이름만으로 어떤 값을 넘겨주는지 확인이 가능하다는 장점이 있다.

Mixing positional arguments and keyword arguments

순서에 맞추어 parameter 값을 전달하는 positional arguments 방식과 keyword arguments 방식을 혼합하여 사용할 수 있다.

주의점

원인은 keyword argument가 positional argument 보다 앞의 위치에서 호출 되었기 때문.
positional argument 가 먼저 호출 됐다면 파이썬은 순서 정보에 따라서 첫번째 값으로 불러오고 자연스럽게 남은 keyword argument는 순서 정보와 이름 정보가 확정되어 정상적으로 값이 불러와진다.

하지만 위의 상황처럼 순서가 잘못 될 경우 첫번째 호출된 keyword argument는 순서 정보를 무시하고 이름 정보를 찾아가게 된다. 남은 positional argument는 순서 정보에 따라 역시 2번째 parameter로 호출된다. 결국 첫번째 parameter는 어떠한 값도 호출하지 못했기 때문에 문제가 생긴다

Parameter Default Value

함수가 호출될 때 특정한 값을 넘기지 않아도 Default 값의 parameter를 정의할 수 있다.

주의점

default 값이 정의 된 parameter가 정의 되지 않은 parameter 보다 앞에 위치한 경우 문제가 생긴다.

원인은 뒤에 온 default 값이 정의되지 않은 parameter가 어떠한 값도 호출할 수 없기 때문. 함수가 받아온 값은 순서 정보에 따라 첫번째 위치로 호출되고, default 값이 정해지지 않은 두번째 parameter가 호출할 수 있는 값이 사라지게 된다

가변 인수들과 다양한 paramenter 호출 방법을 함께 쓸 때 주의해야 할 점

variable length arguments *varargs


임의의 갯수의 positional arguments 값을 호출해오는 가변 인수.

keyword variable length arguments **kwargs

임의의 갯수의 keyword arguments 값을 호출해오는 가변 키워드 인자.

다양한 parameter 호출 방법을 함께 쓸 때는 순서에 주의해야 한다.

positional arguments > default arguments > variable length arguments > Keyword Arguments = default Keyword Arguments > keyword variable length arguments 의 순서를 지켜야 한다.


default 값을 설정한 Keyword Arguments와 default 값이 없는 Keyword Arguments 순서에 영향을 받지 않지만


default 값이 없는 positional arguments 앞에 default arguments를 놓게 되면 문제가 발생한다.

variable length arguments는 앞에서 positional arguments로 호출 되고 남아있는 parameter들을 가변적으로 모두 호출한다. 따라서 variable length arguments가 앞에 오면 positional arguments가 호출할 parameter를 먼저 불러오게되어 문제가 생긴다. 같은 이유로 keyword variable length arguments가 Keyword Arguments의 앞에 오게 되면 Keyword Arguments가 호출할 값들을 미리 가져와버리기 때문에 역시 문제가 생긴다. variable length arguments보다 Keyword Arguments가 앞에 오게 되면 순서 정보를 무시하고 이름 정보에 따라 호출되면서 순서 정보만 가지고 있는 variable length arguments에게 혼동을 주게 된다.

0개의 댓글