넘겨주는 파라미터의 순서가 바뀌어도 상관없고 가독성 향상 가능
positional arguments와 keyword arguments를 혼용하여 사용도 가능
중요한 점은, keyword arguments는 순서 바뀌어도 상관없으나, positional argument부분은 순서를 지켜줘야 함
함수의 parameter에 default 값을 정의해줄 수 있음
값이 넘겨지지 않으면, default 값을 자동으로 넘기게 됨
다만, 여기서 주의할 점은, default 값이 정의된 parameter가 default 값이 정의되지 않은 parameter보다 먼저 위치하면 안됨
*varargs
와 **kwargs
def foo(a, b, *varargs, **kwargs):
print(a, b, varargs, kwargs)
## Call foo
foo(2, 9, 12, 34, x=3, name="bob")
// output
2 9 (12, 34) {'x': 3, 'name': 'bob'}
*varargs
를 통해서, 넘겨지는 parameter 수에 상관없이 tuple 형식으로, positional argumnets를'()'에 묶어서 전달할 수 있음
**kwargs
를 통해서, 넘겨시는 parameter 수에 상관없이 dictionary 형식으로, keyword arguments를 '{}'에 묶어서 전달할 수 있음
- 이 방식의 한계는 variable length keyword arguments slot 전에, 반드시 모든 regular argument slots이 채워져서 전달되어야 하는 점임
- keyword argument만 받아들이고 나머지는 throw exception
- Non-Default Keyword-Only Arguments와 2. Default Keyword-Only Arguments 2가지가 존재
def sortwords(*words, case_sensitive=True): . . . sortwords("bob", "jack", "rose", case_sensitive=False) // 실제 적용 예시 def add(a, b, *more, print_result=True): result = a + b + sum(more) if print_result: print("sum of {} {} {} is {}".format(a, b, ' '.join(map(str, more)), result)) return result // output >> add(1, 3, 9) sum of 1 3 9 is 13 13 >> add(2, 9, 12, 3, print_result=False) 26 >>