def plus(x,y): # 함수를 정의하면서 인자에서 받아올 값을 파라미터
return x+y
z=plus(1,2) # 함수를 불러일으키면서 넣는 값을 인자라고 한다.
print(z)
keyword argument: 함수 호출 때 식별자 앞에 붙은 인자로 전달되는 인자.(위치와는 상관없다.)
positional argument: keyword argument가 아닌 인자
def func(foo, bar=None):
+ positional-only : 위치로만 제공될 수 있는 인자를 지정한다.
def func(posionly1, posionly2, / , positional_or_keyword) :
'/'이 없다면 positional-only arguments를 쓸 수 없다. '/' 뒤로는 positional-or-keyword를
다시 지정할 수 있다.
def func(arg, * , kw_only1, kw_only2):
'*' 이후에 나열된 매개 인자는 반드시 keyword argument로 전달돼야 한다.
def func(*args, **kwargs):
가변 위치인자는 임의의 위치인자를 tuple형태의 변수로 저장한다.
가변 키워드인자는 임의의 키워드인자를 dictionary형태로 저장한다.
둘 다!!!!!
함수 정의가 실행될 때 , 매개변수 값은 왼쪽에서 오른쪽으로 값이 구해진다.
def PowerN(x,y=3):
print(PowerN(5))
에러 뜨는 코드
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)
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 만 와야된다.
에러 뜨는 코드
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")
원리 : variable length keyword arguments는 무조건 parameter의 뒤로 와야된다!
에러 뜨는 코드
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가 와야한다.