1.함수를 정의 할때 default value parameternon-default value parameter 앞에 정의 하면 안 되는 이유에 대해 생각해보시고 블로깅 해주세요.

 

 

 

우선 정의를 명확히 하고 가자.

 

defalult value parameter(기본값을 가지고 있는 매개변수)

 

non-default value parameter(기본값을 가지고 있지 않은 매개변수)

 

 

 

일반적인 순서인 non-default value parameter , default value parameter의 경우

def love_you(my_name, your_name ="아이유"):
	print(f"{my_name} loves {your_name}")
    
#my_name이 non-default value parameter이다.
#your_name = "아이유"가 default value parameter이다.



print(love_you("정우성")) #정우성 loves 아이유

#두번째 매개변수를 생략하여도 기본값 "아이유"가 있어서 정상적으로 작동한다.

 

 

 

 

에러가 일어나는 default value parameter,  non-default value parameter의 경우

 

def love_you(my_name = "정우성" , your_name):
	print(f"{my_name} loves {your_name}")
    


print(love_you("아이유"))


#오류발생!
> Traceback (most recent call last):   
    File "python", line 1 
SyntaxError: non-default argument follows default argument

 

 

 

 

SyntaxError: non-default argument follows default argument

(기본값을 가지지 않은 인자가 기본값을 가진 인자보다 앞에 나와있습니다!) 

 

라고 말하고 있다.

 

즉, 파이썬에서는 파라미터를 받는 순서가 정해져 있다는 것이다.

 

왜냐하면 여러종류의 파라미터를 순서없이 무작위로 생성하면 함수는 어떤 파라미터에 어떤 값을 받아야 할지

정할 수 없기 때문이다.

 

그렇기 때문에 이 순서를 지키지 않으면 파이썬에서 오류가 발생한다!

 

 

 

 

 

 

파라미터를 받는 순서는 다음과 같다.

def example(a, b, c=None, r="배고파", d=[], *args, **kwargs):

(a,b) 는 positional parameter(non-default value parameter)

(c=none) 는 optional parameter

(r="배고파") 는 keyword parameter(default value parameter)

(d=[]) 는 list parameter

(*args) 는 keyword-only(Variable Length Arguments)

(**kwargs) 는 var-keyword parameter(Variable Length Keyword Arguments)

 

 

 

다음과 같은 순서를 유의하여 이어지는 2,3,4번 문제를 해결하자.

 

 

 

 

 

 

2. 위치 인수(positional arguments) 가변 인수(variable length 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)

 

수정본

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

 

 

 

 

 

3. 가변 키워드 인수 (variable length keyword arguments)의 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.

 

 

오류(**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,  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=0

 

 

 

 

 

4.위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.

 

오류

def mixed_params(name="아이유", *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")

 

수정본

def mixed_params( age, address, name="아이유", *args, **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, "seoul", "정우성", "01012341234", "male" ,mobile="01012341234")

 

 

 

 

 

참고자료:

https://wave1994.tistory.com/46

https://stackoverflow.com/questions/16932825/why-cant-non-default-arguments-follow-default-arguments

 

 

 

 

 

 

'Wecode > Python' 카테고리의 다른 글

(Replit it) 기본 문법 정리 01~14  (0) 2021.06.09

+ Recent posts