함수에서 parameter를 지정할 때 기본 값으로 미리 정하고 작성할 수 있다.
def func(a, b = 10):
print(a * b)
func(10)
# 결과값 -> 100
func(10, 2)
# 결과값 -> 20
기본으로 정해진 값으로도 실행이 가능하고 새로운 값을 넣어서도 실행이 가능하다.
하지만 함수를 작성할 때 default parameter는 함수의 맨 오른쪽에만 위치 할 수 있다.
만약 parameter가 3개라면
def func(a, b = 10, c):
print(a + b + c)
func(5, 6)
# Error
실행할 때 입력한 값들이 어디로 들어가야하는지 정확하지 않기 때문이다.
함수를 만들때 인수가 정해지지 않은 함수도 작성 할 수 있다.
def func(*args):
print(args)
func(1,2,3,4)
# 결과값 -> (1,2,3,4)
func(1,2,3)
# 결과값 -> (1,2,3)
def func(*args):
print(*args)
func(1,2,3,4)
# 결과값 -> 1 2 3 4
위처럼 자유롭게 인수의 수를 변경하면서 함수를 호출 할 수 있다.
하지만 위의 dafault value와 같이 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)
# 결과값 -> Error
parameter의 위치를 변경하여 에러를 해결할 수 있다.
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("정우성", 20, "01012341234", "seoul")
# 결과값 -> name=정우성
# args=('01012341234', 'seoul')
# age=20
Variable Length Arguments와 비슷하지만 복수의 키워드를 입력받아서 함수를 호출 할 수 있다.
def func(**kwargs):
print(kwargs)
func(a = 10, b = 20)
# 결과값 -> {'a': 10, 'b': 20}
Variable Length Keyword Arguments도 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")
# 결과값 -> Error
이 코드 또한
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", address="seoul" ,mobile="01012341234")
# 결과값 -> name=정우성
# age=20
# kwargs={'mobile': '01012341234'}
# address=seoul
parameter와 arguments의 위치를 변경해서 에러를 고칠 수 있다.
def func(age, name = "Enjoy", *args):
print(age)
print(name)
print(*args)
func(10, "Water", 20, 30)
# 결과값 -> 10
# Water
# 20 30
# print(args)로 변경하면
# 결과값 -> 10
# Water
# (20, 30) 으로 출력된다.
Parameter Default Value, Variable Length Arguments의 위치를 변경시켜도 작동은 되지만 default value를 변경하여 호출 할 수 없다.
만약 순서를 바꿔서 호출하려 한다면 parameter명에 맞게 입력 후 호출해야한다.
def func(age, *args, name = "Enjoy"):
print(age)
print(*args)
print(name)
func(10, 20, "Water")
# 결과값 -> 10
# 20, "Water"
# Enjoy
def func(age, *args, name = "Enjoy"):
print(age)
print(*args)
print(name)
func(10, 20, name = "Water")
# 결과값 -> 10
# 20
# Water
def func2(name = "Enjoy", **kwargs):
print(name, kwargs)
func2("Water", a = 10, b = 20)
# 결과값 -> Water {'a': 10, 'b': 20}
# print(**kwargs)로 변경하면 Error가 발생한다.
Variable Length Keyword Arguments를 맨 오른쪽에 위치시킨다.
Default Value를 입력하지 않아도 정해진 값으로 출력된다.
def func(*args ,**kwargs):
print(args)
print(kwargs)
func(1,2,3, a = 10, b = 20)
# 결과값 -> (1, 2, 3)
# {'a': 10, 'b': 20}
#
# print(*args)로 변경하면
# 결과값 -> 1 2 3
# {'a': 10, 'b': 20}
#
# print(**kwargs)로 변경하면 Error
Variable Length Arguments 다음에 Variable Length Keyword Arguments가 올 수 있도록 작성한다.
def func(name = "Enjoy", *args, **kwargs):
print(name, args, kwargs)
func(1,2,3, a = 10)
# 결과값 -> Error
이렇게 세가지로만 나열해서는 함수를 호출할 수 없다.
사진의 내용과 같이 다른 인자를 추가해서 정확한 순서를 맞춰야한다.
def func(Positional Arguments,
Default Arguments,
Variable Length Arguments,
Keyword Arguments,
Variable Length Keyword Arguments)
아래는 순서가 잘못된 함수이다.
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("age=",end=""), print(age)
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("address=",end=""), print(address)
print("kwargs=",end=""), print(kwargs)
mixed_params(20, "정우성", "01012341234", "male", address="seoul", mobile="01012341234")
# 결과값 -> age=20
# name=정우성
# args=('01012341234', 'male')
# address=seoul
# kwargs={'mobile': '01012341234'}
위 코드처럼 결과값이 나오게된다.