TIL.05 Function Parameters

박경철·2021년 5월 16일
0

TIL

목록 보기
5/19

1. Parameter Default Value

함수의 'parameter'에 Default 값을 정의해 줄 수 있습니다.
Default 값이 정의된 'parameter'는 함수가 호출될 때 값이 넘겨지지 않아도 됩니다.
값이 넘겨지지 않는 경우 Default 값이 자동으로 넘겨집니다.

만약 Default Value Parameter를 Non-default Value Parameter 앞에 선언하면 Syntax Error가 발생합니다.

def love_you(my_name = "홍길동", your_name): 
    print(f"{my_name} loves {your_name}") 
 
love_you("김철수")

> Traceback (most recent call last):   
    File "python", line 1 
SyntaxError: non-default argument follows default argument

love_you 함수에 "김철수"라는 인자를 넣어 호출하게 되면 your_name과 my_name 둘 중 어디에 값이 넘겨지는지 모르기 때문에 Error가 발생 합니다.
단, Parameter가 모두 Default Value라면 순서와 상관없이 Parameter 선언이 가능합니다.

def love_you(my_name = "홍길동", your_name = "김철수"): 
    print(f"{my_name} loves {your_name}") 
  • Parameter 순서
    Python에는 Parameter Positioning 규칙이 존재합니다.

2. 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치

위치 자료를 통해 에러 발생 원인과 조치 방법에 대해 알아보자

TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

에러 원인 : func_param_with_var_args의 parameter age는 *args 뒤에 있어 keyword-only argument지만, argument를 regular positional argument로 되어 있다.

조치 : func_param_with_var_args의 parameter age를 *args 앞으로 옮기거나, argument를 keyword_only argument로 수정한다.

3. 가변 키워드 인수 (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")

SyntaxError: invalid syntax

에러 원인 : func_param_with_kwargs의 parameter **kwargs의 뒤에는 parameter가 선언 되어 있으면 안된다.(parameter position 자료 참고)

조치 : variable length keyword arguments인 **kwargs의 위치는 제일 마지막에 선언되어야 한다.

4. 위치 인수와 키워드 가변 키워드 인수 (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")

SyntaxError: invalid syntax

에러 원인 : mixed_params의 parameter age는 regular positional argment이기 때문에 args 앞으로 선언되어야 하고, address는 keyword-only argument이기 때문에 **kwargs parameter 뒤에 있으면 안된다.

조치 : Non-default value parameter는 Default value parameter 앞에 올 수 없으므로 age가 제일 앞에 선언되고, keyword-only argument인 address는 *args ~ **kwargs 사이에 선언되어야 한다.

profile
안녕하세요!

0개의 댓글