1. 함수를 정의할 때 default value parameter
를 non-default value parameter
앞에 정의하면 안 되는 이유
함수를 정의할 때 초깃값을 설정해놓은 변수가 중간에 껴있으면 positional argument 특성때문에 엉뚱한 매개변수에 초깃값이 들어갈 수 있으므로 오류를 내버리는 거 같다.
그러므로 초깃값을 설정해놓은 매개변수는 항상 맨 뒤에 놓도록 한다.
실행하면 아래와 같은 오류가 난다.
SyntaxError: non-default argument follows default argument
초깃값을 설정해놓은 매개변수는 뒤에는 초깃값을 설정해 놓지 않은 매개변수는 사용할 수 없다는 오류 메시지가 뜬다.
2. 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치를 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 블로그에 정리해 주세요.
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")
------------------------------------------------
name=정우성
args=('01012341234', 'seoul')
age=20
고정 인수와 가변 인수를 함께 사용할 때는 고정 매개변수를 먼저 지정하고, 그 다음 매개변수에 *
를 붙여주면 된다. 매개변수 순서에서 *args
는 반드시 가장 뒤쪽에 와야 한다.
함수를 호출할 때는 매개변수 순서대로 위치 인수를 준다.
3. 가변 키워드 인수 (variable length keyword arguments)의 위치를 다음 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 블로그에 정리해 주세요.
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", address="seoul", mobile="01012341234")
---------------------------------------------
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul
키워드 파라미터를 사용할 때는 매개변수 앞에 별 두 개(**
)를 붙인다.
함수를 정의할 때 매개변수 순서에서 가장 뒤쪽에 배치한다.
4. 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치를 다음 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 블로그에 정리해 주세요.
**kwargs
가 *args
보다 앞쪽에 오면 안 된다. 매개변수 순서에서 **kwargs
는 반드시 가장 뒤쪽에 와야 한다.
특히 고정 매개변수와 *args
, **kwargs
를 함께 사용한다면 def custom_print(a, b, *args, **kwargs):
처럼 매개변수는 고정 매개변수, *args, **kwargs
순으로 지정해야 한다.
name="아이유"
를 *ags
앞에 배치한다.
address의 인수가 key=value
형태로 되어있어서 매개변수 address를 **kwargs
앞에 배치한다.
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")
--------------------------------------------
name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul