[TIL] Function parameters
함수 선언시 parameter 의 순서
def example(a, b, c=None, r="w", d = [], *args, **kwargs) 1. `a, b : positional parameter` 2. `c = none : optional parameter` 3. `r= "w" : keyword parameter` 4. `d = [] : list parameter` 5. `*args : keyword-only` 6. `**kwargs : var-keyword parameter`
함수를 정의할 때 default value parameter를 non-default value parameter 앞에 정의하면 안 되는 이유
-
non-default value parameter
의 경우 값이 정해져 있지 않아도 기본적으로keyword
=value
로 정의되어 있어서parameter
로 설정한 값과 받아오는 값의 순서만 일치하면 자유롭게 값을 받아 사용이 가능합니다. -
단점으로는
- 논리적 오류를 발생시킬 가능성이 있습니다.
- 인자에 어떤 타입이 들어오는지 파악이 어려워 코드의 가독성이 떨어집니다.
default value parameter
의 경우 함수 선언과 동시에 값이 정해지는 인자입니다.
기본 값이 존재하는 인자를 받을 때 사용하며 코드의 중복을 줄이고 가독성을 높이기 위해 사용합니다. 값이 이미 존재해도 변경이 가능합니다.
- 논리적 오류를 발생시킬 가능성이 있습니다.
-
이러한 사항 때문에
default value parameter
가non-default value
parameter
보다 항상 뒤에 위치해야 되는 규칙을 지켜줘야 됩니다. 위 규칙을 어길 시 에러가 발생합니다. 만약default value parameter
,non-default parameter
형식으로 선언을 한 후 값을 하나만 보낸다면 어떤parameter
에 어떤 값을 받아야 될지 이해하지 못하기 때문입니다.
위치 인수와 가변 인수의 위치에 따른 발생 에러 수정 전과 후
- [ 에러 발생 ]
def func_param_with_var_args(name, *args, age): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) func_param_with_var_args("정우성", "01012341234", "seoul", 20)
-
[ 어떤 에러가 발생했는지? ]
missing 1 required keyword-only argument: age
-
[ 에러 수정 후 ]
def func_param_with_var_args(name, age, *args): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) func_param_with_var_args("정우성", "01012341234", "seoul", 20)
-
순차적으로 값을 읽어들이는데
non-default
값이 2개임과 동시에 중간에 위치하는 바람에age
인자를 어느parameter
에 넣어줘야 하는지 이해를 하지 못해서 에러를 발생시킵니다.
위치 인수는 항상 가변 인수 앞에 위치해야 합니다.
가변 키워드 인수 위치에 따른 발생 에러 수정 전과 후
- [ 에러 발생 ]
def func_param_with_kwargs(name, age, **kwargs, address=0): print("name=",end=""), print(name) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul”)
- [ 에러 수정 후 ]
def func_param_with_kwargs(name, age, address=0, **kwargs): print("name=",end=""), print(name) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul”)
- [ 어떤 에러가 발생했는지? ]
def func_param_with_kwargs(name, age, **kwargs, address=0):
SyntaxError: invalid syntax
**kwargs
가 중간에 위치함에 따라address
(위치인수)와**kwargs
(가변키워드함수)의 순서가 바뀌면서 어느 parameter에 해당 값을 넣어줘야하는지 이해를 하지 못하고 에러를 발생시켰습니다.
위치 인수와 키워드 가변 키워드 인수 위치에 따른 수정 전과 후
- [ 에러 발생 ]
def mixed_params(name="아이유", *args, age, **kwargs, address): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
-
[ 에러 수정 후 ]
def mixed_params(age, name="아이유", *args, address, **kwargs): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234",address="seoul")
-
[ 어떤 에러가 발생했는지? ]
def mixed_params(name="아이유", *args, age, **kwargs, address):
SyntaxError: invalid syntax
- 인자들이 서로 어떠한 parameter 값과 대치를 해야 하는지 찾지 못하기 때문에 에러를 발생시킵니다. (keyword-only argument는 variable length keyword arguments 앞에 위치해야 합니다. position 인자인 age는 앞에 위치해야 합니다.)
Author And Source
이 문제에 관하여([TIL] Function parameters), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leki305/Function-parameters저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)