<Python> Function Parameters

은경·2021년 10월 11일
1

default value parameter VS non-default value parameter


default value parameter

함수 선언시 미리 값이 정해진 인자. 순서가 상관이 없음.
코드의 중복을 줄이고 가독성을 높인다.

def ex_function(ramen1,ramen2) :
 return (f'''{ramen1} 보다 {ramen2}먼저''')
print(ex_function(ramen1="면",ramen2="스프")) 

결과 ) 면 보다 스프먼저

non-default value parameter

가장 기본적인 형태의 미리 값이 정해지지 않은 인자.
함수를 호출할 때 인자의 순서대로 인자값을 넣어주어야 함.
순서가 틀리면 오류가 발생할 확률이 있으며, 가독성이 떨어짐.

def ex_function(ramen1,ramen2) :
  return (f'''{ramen1} 보다 {ramen2}먼저''')
print(ex_function("면","스프")) 

결과 ) 면 보다 스프먼저

만일 default value parameter를 non-default value parameter 앞에 선언한다면?

def ex_function(ramen1="면",ramen2) :
 return (f'''{ramen1} 보다 {ramen2}먼저''')
print(ex_function("스프")) 

결과) SyntaxError: non-default argument follows default argument

SyntaxError - 오류가 난다.


파이썬은 function parameter에서 arguments를 처리하는 순서가 정해져 있기 때문에 지켜주지 않으면 오류가 발생한다.

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

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

  • a,b : positional parameter

  • c=none : optional parameter

  • r="w" : keyword parameter

  • d=[] : list parameter

  • *ae : keyword-only

  • **ab : var-keyword parameter


※ 오류 예시
1. 위치 인수(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)
결과 ------------- 오류
수정 후 )
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")
결과 ------------- 정상

1 - 위에 정리한 순서 처럼 position parameter가 앞에 먼저 와주어야 한다.


2. 가변 키워드 인수 (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")
결과 ------------- 오류
수정 후 )
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")
결과 ------------- 정상


2 - 먼저 position parameter인 name과 age가 위치하고 뒤에는 default값이 있는 address가 위치 해야하며 맨 마지막에 가변키워드인수 (Variable length keyword arguments)가 와야한다.


3. 위치 인수와 키워드 가변 키워드 인수 (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")
결과 ------------- 오류
수정 후 )
def mixed_params(age, name="아이유", *args, address=0, **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, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
결과 ------------- 정상


3 - position parameter인 age가 처음에 위치하고 address와 kwargs의 위치를 변경해 준다.

tip ) default값인 name="아이유"를 출력하고 싶다면,
args<->name="아이유" 위치 변경시 '정우성' 은 args 값으로 옮겨가며 name = "아이유" 가 된다

profile
Back-end 개발자

0개의 댓글