Python - Function Parameters

Seob·2020년 7월 21일
0

TIL

목록 보기
15/36

Parameter Default Value

다만 조심해야 할점은 default 값이 정의된 parameter가 default 값이 정의 되지 않은 parameter 보다 먼저 위치해 있으면 안된다는 점입니다. 만일 default value parameternon-default value parameter 앞에 선언하면 syntax error가 납니다.

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

default value parameternon-default value parameter 앞에 선언하면 에러가 날까? 🤷🏻‍♂️

def love_you(my_name = "정우성", your_name): 
    print(f"{my_name} loves {your_name}") 

만약 위 함수를 호출할 때 다음과 같이 호출한다면 어떻게 될지 생각해보자.

love_you("정우성")

"정우성"이 my_name으로 들어가야 할지, your_name으로 되어야 할지 애매해진다. 그렇기때문에 파이썬에서는 모든paramatersdefault arguments 앞에 놓여야만 한다.


https://getkt.com/blog/python-keyword-only-arguments/

def example(a, b, c=None, r="w", d=[], *args, **kwargs)
  • a, b : positional parameter
  • c=None : optional parameter
  • r="w" : keyweord parameter
  • d=[] : list parameter
  • *args : keyword-only
  • **kwargs : var-keyword parameter

stackoverflow참조

어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과

1.

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)

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

Solution

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

>>>
name=정우성
args=('01012341234', 'seoul')
age=20

2.

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

Solution

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

>>>
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul

3.

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

Solution

def mixed_params(age, address, name="아이유", *args, **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, "seoul", "정우성", "01012341234", "male",
             mobile="01012341234", )
             
>>>
name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
profile
Hello, world!

0개의 댓글