[python] function 과 parameter

kbj7227·2020년 6월 24일
1
  • 함수 기본 실행
  • argument의 종류
  • parameter의 종류
  • default parameter

함수 기본 실행

def plus(x,y): 	# 함수를 정의하면서 인자에서 받아올 값을 파라미터
  return x+y

z=plus(1,2)	# 함수를 불러일으키면서 넣는 값을 인자라고 한다.

print(z)

argument의 종류

keyword argument: 함수 호출 때 식별자 앞에 붙은 인자로 전달되는 인자다.(위치와는 상관 X)

positional argument: keyword argument가 아닌 인자


parameter의 종류

  • positional-or-keyword : 위치 인자나 키워드 인자로 전달될 수 있는 인자를 지정함다.
def func(foo, bar=None): ...
  • positional-only : 위치로만 제공될 수 있는 인자를 지정함다.
def func(posonly1, posonly2, /, positional_or_keyword) : ...

'/'이 없다면 positional-only argumetns 를 쓸 수 없다. '/' 뒤로는 positonal-or-keyword를 다시 지정할 수 있다.

  • keyword-only : 키워드로만 제공될 수 있는 인자를 지정함다.
def func(arg, * , kw_only1, kw_only2): ...

'*' 이후에 나열된 매개 인자는 반드시 keyword argument로 전달돼야 한다.

  • var-positional : 제공될 수 있는 위치 인자들의 임의의 시퀀스를 지정함다.
  • var-keyword : 제공될 수 있는 임의의 개수 키워드 인자들을 지정함다.
def func(*args, **kwargs): ...

가변 위치인자는 임의의 위치인자를 tuple형태의 변수로 저장한다.
가변 키워드인자는 임의의 키워드인자를 dictionary형태로 저장한다.
둘 다


default parameter

함수 정의가 실행될 때, 매개변수 값은 왼쪽에서 오른쪽으로 값이 구해진다.

def PowerN(x,y=3):
  return x**y

print(PowerN(5))

default value는 오른쪽부터 채워져야 된다.
함수를 실행할때 인수값을 들어와 왼쪽부터 채워넣기 때문이다.

positional arguments와 variable Length Positional 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", age=20)

에러 원인 : *args 뒤에 오는 age는 keyword-only argument지만, argument를 regular positional argument로 되어있다.

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", age = 20)

원리 : variable Length Positional Arguments 뒤로는! Keyword-Only Arguments 만 와야된다.

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

에러 원인 : **kwargs뒤에는 아무것도 없어야 되는데 address=0가 와서 그렇다.

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

원리 : variable length keyword arguments는 무조건 parameter의 뒤로 와야된다!

variable Length Positional arguments와 variable length keyword arguments의 위치

에러 뜨는 코드

def mixed_params(name="wecode", *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")

에러 원인 : age는 regular positional argument여서 args 앞으로 와야되고, address는 keyword-only argument여서 args 뒤 **kwargs 앞으로 와야된다.

def mixed_params(age,name="wecode", *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")

원리 : 위에서부터 얘기를 종합해보자면 variable Length Positional arguments 앞까지는 regular Positional Arguments 와 Default Arguments이 와야 되며, variable Length Positional arguments와 variable length keyword arguments의 사이에는 keyword-only Arguments가 와야한다.


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

0개의 댓글