[TIL] Python - Function Parameter

문성호·2020년 8월 20일

default value parameter는 반드시 non-default value Parameter 뒤에 와야 하는 이유

  • 따라서 default 값이 정해진 parameter가 non-default value paramter보다 먼저 오면 안 된다.

  • 되면 안 되는 이유는 "Parameter로 무엇을 받을지 모호해지기 때문"이다.
    아래 예제코드를 보면

def myIntroduce(my_name = "문성호", my_Address):
  print(f"my name is {my_name}")
  print(f"I live in {my_Address}")

print(myIntroduce("인천"))

   결과 :
Traceback (most recent call last):
  File "python", line 1
SyntaxError: non-default argument follows default argument
  • default 인수인 my_name을 넣었더라도, 원하면 언제든 다른 인수를 넣을 수 있다. 그러나 인수가 하나(위 예의 경우 "인천")만 들어가면, my_name에 들어가야 할지, my_Address에 들어가야 할 지 애매해진다.

  • 따라서 반드시 아래코드와 같이 default-value parameter를 뒤로 배치해줘야, 인수가 하나만 들어오더라도 my_Address에 넣을 수 있다.

def myIntroduce(my_Address, my_name = "문성호"):

function parameter의 순서

  • Python의 Function Parameter는 여러가지 종류가 있고,
    그 인수들이 각자의 위치에 따라 순서가 정해져있다.
    위 그림과 같이 약속되어 있다.

    1. Positional Argument
    2. Default-value Parameter Argument(기본 값을 정한 인수)
    3. Variable Length Positional Argument (리스트 등을 받을 수 있는 인수)
    4. Keyword Argument
    5. Variable Length Keyword Arguments (딕셔너리 등을 받을 수 있는 인수)

    이 순서대로만 받을 수 있다.

예제 풀이

예제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)

positional -> variable length

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("정우성", "01012341234", "seoul", 20)
  • *args는 가변 인수 함수이기 때문에 위치 인수 뒤에 와야 한다.


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

positional -> keyword -> variable length keyword

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")
  • def func_param_with_kwargs(name, age, address=0, **kwargs):
  • 이 순서대로 바꿔주어야 한다.

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

positional -> default -> variable length -> keyword-only -> variable length keyword

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)


mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
profile
오늘을 모아 내일을

0개의 댓글