파이썬에서 parameter를 받아야되는 순서는 다음과 같다.
위치 인자 - 기본값 인자 - 가변 인자 - 키워드 인자 - 키워드 가변 인자
def order(a, b, c=None, r="w", d=[], *args, **kargs)
a, b: positional parameter
c=None: optional parameter
r="w": keyword parameter
d=[]: list parameter
*args: keyword-only
**kargs: var-keyword paramter
매개변수(parameter) : 함수에 전달된 데이터를 대입하기 위한 변수, 함수 선언 시 작성
인자(argument) : 함수에 전달하는 데이터 자체
위치 인자(positional argument): 인자와 매개변수에 위치와 일치시키는 인자
키워드 인자(keyword argument) : 매개변수에 이름으로 일치시키는 인자
가변 인자(variable length positional argument) : 여러 개의 위치 인자를 받을 때 사용, 주로 *args 사용, 튜플로 받음
키워드 가변 인자(variable length positional argument) : 여러 개의 키워드 인자를 받을 때 사용, 주로 **kwrags 사용, 딕셔너리로 받음
매개변수 기본값(parameter default value) : 함수를 정의할때 기본값 지정, 함수를 사용할때 인자를 보내지않는다면 미리 지정한 기본값을 사용
함수의 parameter에 default값을 정의해 줄 수 있다. Default 값이 정의된 parameter는 함수가 호출될 때 값이 넘어가지 않아도 된다. 값이 넘겨지지 않은 경우 default값이 자동으로 넘겨지게 된다.
def fact(user, computer = "Mac"):
print(f"Many {user} prefer {computer} than Windows")
fact("Backend-developers")
호출
#"Many Backend-developers prefer Mac than Windows"
⚠️주의) default값이 정의된 parameter가 default값이 정의되지 않은 parameter보다 먼저 위치해 있으면 안된다. 그렇지 않으면 에러가 발생한다.
def fact(user = "Mac", computer):
print(f"Many {user} prefer {computer} than Windows")
fact("Backend-developers")
SyntaxError: non-default argument follows default argument
이와 같이 syntax error가 발생한다.
위치 인수와 가변 인수의 잘못된 위치로 인한 오류.
def func_param_with_var_args(name, *args, age):
print("name=", name)
print("args=", args)
print("age=", age)
func_param_with_var_args("김코드", "12345", "Seoul", 30)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
func_param_with_var_args("김코드", "12345", "Seoul", age=30)
age=20
으로 해야한다.def func_param_with_var_args(name, age, *args):
print("name=", name)
print("args=", args)
print("age=", age)
func_param_with_var_args("김코드", 30, "12345", "Seoul")
키워드 가변 인자의 잘못된 위치.
def func_param_with_kwargs(name, age, **kwargs, address=0):
print("name=", name)
print("age=", age)
print("kwargs=", kwargs)
print("address=", print(address)
func_param_with_kwargs("김코드", "20", mobile="12345", address="Seoul")
SyntaxError: invalide syntax
def function_param_with_Kwargs(name, age, address=0, **kwargs):
.
.
.
func_param_with_kwargs("김코드", "20", mobile="12345", address="Seoul")
def mixed_params(name="김코드", *args, age, **kwargs, address):
print("name=", name)
print("args=", args)
print("age=", age)
print("kwargs=", kwargs)
print("address=", address)
mixed_params(20, "박쟝고", "12345", "male" ,mobile="12345", address="seoul")
def mixed_params(age, name="김코드", *args, address, **kwargs):
.
.
.
mixed_params(20, "박쟝고", "12345", "male" ,mobile="12345", address="seoul")