Function Parameters

인간·2022년 6월 27일
0

함수 기본 실행


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

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

print(z)

arugument의 종류

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

positional argument: keyword argument가 아닌 인자


parameter의 종류

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

def func(posionly1, posionly2, / , positional_or_keyword) :

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

  • keyword-only : 키워드로만 제공될 수 있는 인자를 지정한다.

def func(arg, * , kw_only1, kw_only2):

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

  • val-positional : 제공될 수 있는 위치 인자들의 임의의 시퀀스를 지정한다.
  • val-keyword : 제공될 수 있는 임의의 개수 키워드 인자들을 지정한다.

def func(*args, **kwargs):

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

default parameter

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

def PowerN(x,y=3):

  • return x**y

print(PowerN(5))

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

positinoal arguments와 varialbe 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 argumnet로 되어있다.


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가 와야한다.

profile
잇츠미

0개의 댓글