# parameter (매개변수)
# 함수의 정의부분에 나열되어 있는 변수, 여기서는 a, b가
parameter가 되겠습니다.
def plus(a, b):
return a + b
# argument (전달인자)
# 함수를 호출할 때 실제 전달되는 값, 여기서는 1, 2가
argument가 되겠습니다.
result = plus(1, 2)
# parameter의 순서에 따라 argument의 값을 넣어줘야 원하는 결과값을
얻을 수 있습니다.
def introduce_myself(name, age, gender):
return f"제 이름은 {name}이고 {gender}이고 {age}살 입니다."
result = introduce_myself("홍길동", 100, "남자)
# key argument방식으로 입력시 순서에 영향을 받지 않습니다.
def introduce_myself(name, age, gender):
return f"제 이름은 {name}이고 {gender}이고 {age}살 입니다."
result = introduce_myself(gender = "남자, name ="홍길동",
age = 100)
SyntaxError: positional argument follows keyword argument
실행 시 non-default value parameter의 argument의 값을 주게 될텐데요.
이미 값이 주어져 있는 parameter가 먼저와 있으면 충돌이 발생하게 되어
에러가 발생하게 될겁니다.
가변인수에 대해 설명하고 진행하겠습니다. 매개변수에 *를 붙여주는 것으로
여러 argument를 받을 수 있습니다. 그리고 명칭은 아무거나 해도 되지만
통상 arguments 에서 가져와 *args로 씁니다. 주의할 것은 가변 인수는
위치인수보다는 뒤에 있어야 하지만 꼭 맨뒤에 있어야 할 필요는 없습니다.
다만 가변인수로 인해 그 뒤에 다른 변수에 값을 줄 수 없기에 주의해야합니다.
아래 에러에 해결점이 될거 같네요.
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)
실행해보면
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
이런 에러메시지를 받게 되고 20이 age라고 생각 할 수 있지만 arg로 인해 20도 arg 매개변수의 인자로 인식되어 age 매개변수의 인자는 없는것으로 인식되어 에러가 발생합니다.
수정하게 되면 아래와 같이 됩니다.
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")
**kwargs로 보여지는 가변키워드인수에 대해 설명하고 진행하겠습니다.
매개변수에 ** 를 붙이는 것으로 특성이 주어지며 *args과 비교해보면
*args는 tuple형식이고 **kwargs는 Dictionary형식입니다. 3.2번에서
age가 *args 뒤에 있을때 무시를 당했었는데 **kwargs는 무조건 마지막에
위치하여야 하여 뒤에 변수가 오면 에러가 발생합니다.
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, **kwargs, address=0):
SyntaxError: invalid syntax
구문 오류가 나고 아래와 같이 수정하여 진행하면 제대로된 결과값을 얻을 수 있습니다.
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 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")
먼저 그냥 실행해보면 **kwargs 뒤의 address에서 syntaxError가 발생하여 **kwargs 앞으로 위치를 바꿔주는 것으로 해결이 가능하며 그 다음으로 age가 *args 뒤에 있어 적절한 인수값을 받지 못함으로 제일 앞으로 위치를 바꿔줌으로 에러를 해결하고 원하는 값을 가질 수 있게 됩니다.
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")