Function Parameters
1. 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유에 대해 생각해보시고 블로깅 해주세요.
[정답]
default value parameter를 non-default value parameter 앞에 선언하면 syntax error 발생
def love_you(my_name = "정우성", your_name):
print(f"{my_name} loves {your_name}")
`
love_you("정우성")
`
Traceback (most recent call last):
File "python", line 1
SyntaxError: non-default argument follows default argument
2. 위치 인수(positional arguments)와 가변 인수(variable length 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", 20)
- 주어진 함수 입력 시
syntax error 발생
Traceback (most recent call last):
File "/Users/shinisgood/Documents/1.py", line 6, in <module>
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
[정답]
*args는 정해지지 않은 수의 parameter를 받는다.
- 그렇기 때문에,
*args 는 맨 마지막에 위치해야한다.
def func_param_with_var_args(name, age, *args): # "*args" 는 중간에 위치하면 에러가 나기 때문에 맨뒤로 옮겨주고
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
`
func_param_with_var_args("정우성", 20, "01012341234", "seoul") # "*args"에 맞춰 인수 위치 또한 바꿔준다.
name=정우성
args=('01012341234', 'seoul')
age=20
3. 가변 키워드 인수 (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")
- 주어진 함수 입력 시
syntax error 발생
[정답]
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
[설명]
def func(
1. Regular Positional Arguments, # age - 20
2. Default Arguments, # name="아이유"
3. Variable Length Positional Arguments, # *args - "정우 성", "01012341234", "male"
4. Keyword-only Argument or Keyword-only Argument with default, # address - address="seoul"
5. Variable Length Keyword Arguments ) # **kwargs - mobile="01012341234"