[T.I.L] <Python> Function Parameters

재운·2021년 3월 22일
0
post-thumbnail
post-custom-banner

Q) default parameter를 non-default parameter 앞에 사용하면 안되는 이유?

파이썬 함수를 선언할 때는 parameter를 받는 순서가 있고 아래와 같은 순서로 받는다.

def example(a,b,c=None,r='w',d=[],*ae,**ab):

a,b : optional parameter
c=None : positional parameter
r='w' : keyworded parameter
d=[] : list parameter
*ae : keyword only
**ab : var-keyword parameter

파라미터를 정의하는 순서없이 무작위로 넣으면 함수는 어떤 파라미터에 어떤 값을 넣어야할지 정할수 없다.

하지만! 파이썬3 이상부터는 파라미터 중간에 *을 넣으면 순서 상관없이 사용할 수 있다.

def example2(x="hello",y="bye",*,a,b):
	pass
example2(a=2,b=3)

함수를 선언할때 위치 인수(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)

위와 같이 코드를 작성하면 'age' 항목을 인식못해 TypeError가 발생한다.

TypeError: func_param_with_var_args() missing 1 required keyword-only argument: '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)
 
func_param_with_var_args("정우성",20,"01012341234", "seoul")  

이와같이 parameter 순서를 바꿔주면 해결된다.(*은 써봤지만 오류나서 pass😂)

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

위의 코드는 **kwargs(variable length keyword argument) 뒤에 default parameter가 나왔기 때문에 오류가 생긴다.

👉 **kwargs와 address=0 파라미터 위치만 바꿔서 선언해주면된다.

profile
Life is memory
post-custom-banner

0개의 댓글