default value parameter VS non-default value parameter
함수 선언시 미리 값이 정해진 인자. 순서가 상관이 없음.
코드의 중복을 줄이고 가독성을 높인다.
def ex_function(ramen1,ramen2) :
return (f'''{ramen1} 보다 {ramen2}먼저''')
print(ex_function(ramen1="면",ramen2="스프"))
결과 ) 면 보다 스프먼저
가장 기본적인 형태의 미리 값이 정해지지 않은 인자.
함수를 호출할 때 인자의 순서대로 인자값을 넣어주어야 함.
순서가 틀리면 오류가 발생할 확률이 있으며, 가독성이 떨어짐.
def ex_function(ramen1,ramen2) :
return (f'''{ramen1} 보다 {ramen2}먼저''')
print(ex_function("면","스프"))
결과 ) 면 보다 스프먼저
만일 default value parameter를 non-default value parameter 앞에 선언한다면?
def ex_function(ramen1="면",ramen2) :
return (f'''{ramen1} 보다 {ramen2}먼저''')
print(ex_function("스프"))
결과) SyntaxError: non-default argument follows default argument
SyntaxError - 오류가 난다.
출처 ) https://getkt.com/blog/python-keyword-only-arguments/
def example(a, b, c=None, r="w" , d=[], *ae, **ab)
a,b : positional parameter
c=none : optional parameter
r="w" : keyword parameter
d=[] : list parameter
*ae : keyword-only
**ab : var-keyword parameter
※ 오류 예시
1. 위치 인수(positional arguments)와 가변 인수(variable length arguments)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) 결과 ------------- 오류
수정 후 ) 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") 결과 ------------- 정상
1 - 위에 정리한 순서 처럼 position parameter가 앞에 먼저 와주어야 한다.
2. 가변 키워드 인수 (variable length keyword arguments)
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") 결과 ------------- 정상
2 - 먼저 position parameter인 name과 age가 위치하고 뒤에는 default값이 있는 address가 위치 해야하며 맨 마지막에 가변키워드인수 (Variable length keyword arguments)가 와야한다.
3. 위치 인수와 키워드 가변 키워드 인수 (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=0, **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") 결과 ------------- 정상
3 - position parameter인 age가 처음에 위치하고 address와 kwargs의 위치를 변경해 준다.
tip ) default값인 name="아이유"를 출력하고 싶다면,
args<->name="아이유" 위치 변경시 '정우성' 은 args 값으로 옮겨가며 name = "아이유" 가 된다