[python] Function Parameters

Bik_Kyun·2022년 3월 6일
0
post-thumbnail

1. 함수를 정의할 때 default value parameter를 non-default value parameter 앞에 정의하면 안 되는 이유

1. 일단 Argument에는 우선순위가 있다.

  1. Positional Arguments ex) my_name
  2. Default Argument ex) my_name = "정우성"
  3. Variable Length Positional Arguments ex) *args
  4. Non-Default Keyword-Only Arguments ex) 값이 할당안된 my_name
  5. Keyword-Only Argument with Defaults
  6. Variable Length Keyword Arguments ex) **kwargs

2. 방향성

Positional Argument가 Parameter에 할당될 때는 왼쪽에서 오른쪽으로의 방향성이 존재한다.

def love_you(my_name = "정우성", your_name): 
    print(f"{my_name} loves {your_name}")  
> Traceback (most recent call last):   
    File "python", line 1 
SyntaxError: non-default argument follows default argument

이때, non-default value parameter는 할당받는 값이 없으므로 오류가 발생한다.

2. 위치 인수(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)

원인

name정우성이 할당되고 나머지 01012341234,seoul,20*args에 할당되기 때문에 age 파라미터에 할당될 값이 없다.

해결책

def func_param_with_var_args(name, age, *args):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)

Variable Length Positional Arguments가 Positional Arguments 앞에 있어서 발생한 Error이므로 *args의 위치를 맨 뒤로 변경시킨다.

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")

원인

Variable Length Positional Arguments가 Default Arguments 보다 앞에 위치해서 SyntaxError가 발생했다.

해결책

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)

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")

원인

Argument들의 우선순위가 뒤죽박죽이라 SyntaxError 발생

해결책

def mixed_params(age, name="아이유", *args, address, **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)

참고자료
https://getkt.com/blog/python-keyword-only-arguments/

profile
비진

0개의 댓글