default value parameter와 non-default value parameter

Psj·2020년 10월 22일
0

Python

목록 보기
8/41

문제 1

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)

에러내용

Traceback (most recent call last):
File "python", line 7, in <module>
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

해당 코드는 *args를 사용했는데 *(애스터리스크 기호)를 인자명 앞에 붙이면 인자를 tuple타입으로 묶어서 여러번사용하게 할 수 있다는 것을 알아야한다.
현재
def func_param_with_var_args(name, *args, age) 이 코드는 콤마로 3칸으로 나뉘어 있지만

맨 아랫줄 정의된 인자는 앞서말한 *(애스터리스크)를 사용하여 총 4칸을 사용했기 때문에
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
애스터리스크를 사용한 인자 뒤의 인자를 keyword argument로 만들어주지 않으면 컴퓨터가 찾지를 못하고 위와 같은 에러가 발생한다.

그러므로 맨 아랫줄을 아래와 같이 변경해주면 정상적으로 실행이 된다.

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)

문제2

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")

에러내용

Traceback (most recent call last):
File "python", line 1
def func_param_with_kwargs(name, age, **kwargs, address=0):
                                                                                        ^
SyntaxError: invalid syntax

해당코드는 맨아랫줄에 설정된 인자값들이 맨윗줄 인자값에 덧씌워지게되는데 name에는 "정우성"이 들어가고 age에는 "20" 이 들어가므로 정상작동한다.
애스터리스크 두개를 사용하는 **kwargs는 딕셔너리를 만드는데
맨 아랫줄 unc_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul") 이 줄을 보면
"정우성", "20" 이 들어간후 바로 딕셔너리가 두개 나오므로 첫줄 address=0 인자가 들어갈 자리를 잃게 된다.

그래서 아래와같이 address=0, **kwargs 순서를 바꿔주면 정상동작한다.

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")

문제3

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")

에러내용

Traceback (most recent call last):
File "python", line 1
def mixed_params(name="아이유", *args, age, **kwargs, address):
^
SyntaxError: invalid syntax

정의되지 않은 인자를 맨 앞자리에 넣고 그다음 정의된 인자를 넣고 다음 튜플형 패킹 인자를 넣고 딕셔너리 패킹인자와 인자가 헷갈리지않기위해 사이에 정의되지않은 함수를 넣으면 아래의 코드가 되어 정상작동한다.

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")

profile
Software Developer

0개의 댓글