python | February 01, 2020
함수를 사용할 때, 순서를 맞추어서 parameter 값을 전달
def func_name(name, age):
print(name, age)
func_name("Hong", 20)
함수를 사용할 때, 순서 대신에 parameter의 이름에 넣는 방식으로 값을 전달
def func_name(name, age):
print(name, age)
func_name(name="Hong", age=20)
def func_name(name, age):
print(name, age)
func_name("Hong", age=20)
#SyntaxError: positional argument follows keyword argument
def func_name(name, age):
print(name, age)
func_name(name="Hong", 20)
keyword argument가 맨 뒤에 위치하더라도 다음과 같은 문제가 발생할 수 있다.
#SyntaxError: positional argument follows keyword argument
def func_name(name, age, a, b, c):
print(name, age, a, b, c)
func_name("Hong", 20, a=30, 40, c=50)
! positional arguments에 따라서 name=“Hong”, age=20, a=30, b=40이라는 값이 할당되는데, 마지막에 keyword argument로 a=50이라는 값을 또 넣으려고 보니, 기존 a값이랑 겹쳐서 error 발생
#TypeError: func_name() got multiple values for argument 'a'
def func_name(name, age, a, b, c):
print(name, age, a, b, c)
func_name("Hong", 20, 30, 40, a=50)
여러개의 keyword arguments가 뒤쪽으로 위치하면서, positional arguments에 영향을 주지 않는다면 OK
#겹쳐서 입력되는 parameter도 없고, keyword arguments가 positional보다 뒤에 위치한다.
def func_name(name, age, a, b, c):
print(name, age, a, b, c)
func_name("Hong", 20, b=30, c=40, a=50)
def func_name(name, age=20):
print(name, age)
func_name("Hong")
#age 값을 할당해주지 않아도 자동으로 default 값인 20이 입력
#SyntaxError: non-default argument follows default argument
def func_name(name="Hong", age):
print(name, age)
! non-default value보다 앞에 위치한 default value가 하나라도 있으면 error 발생
#SyntaxError: non-default argument follows default argument
def func_name(name, age, a, b=20, c):
print(name, age, a, b, c)
#SyntaxError: non-default argument follows default argument
def func_name(name, age, a, b=20, c):
print(name, age, a, b, c)
func_name("Hong", 20, "a값", "b값일까c값일까")
name=“Hong”, age=20, a=“a값”까지 positional argument 방식으로 넘겨주고, c=“b값이네요”는 keyword argument 방식으로 넘겨주고, 값이 할당되지 않은 b는 default 값인 20으로 넘겨받으면 clear 할 것 같다. 그런데 결과는 역시 SyntaxError. 왜?
#SyntaxError: non-default argument follows default argument
def func_name(name, age, a, b=20, c):
print(name, age, a, b, c)
func_name("Hong", 20, "a값", c="b값이네요")
함수 parameter를 적을 때 규칙을 무시하고 마음대로 적으면 SyntaxError가 뜬다.
위의 예시들도 모두 python의 parameter 규칙에 반하기 때문에 error가 생겼다.
위의 순서에 따라, non-default value(Regular Positional Arguments)가 default value보다 먼저 와야 한다.
Reference:
-https://getkt.com/blog/python-keyword-only-arguments/