위치 인수, 가변 인수, 키워드 인수

배찬영·2021년 5월 12일
0

파이썬

목록 보기
29/31
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)

위와 같이 코드가 정의되어 있다. 에러를 발생 시키는데 age값은 키워드 인수라는 이유로 에러가 발생한다.

출처 : https://getkt.com/blog/python-keyword-only-arguments/

위에 사진으로 인수들의 순서를 확인해 보자.
가변인수 *args의 기준으로 앞에는 위치인수, 뒤로는 키워드 인수가 순서한다.
이 내용으로 보았을 때

def func_param_with_var_args(name, *args, age):
			   #위치인수        키워드인수

name은 위치인수, age는 키워드 인수임으로 에러 발생.
에러 없게 함수를 수정한다면

func_param_with_var_args("정우성", "01012341234", "seoul", age = 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")

이렇게 수정하면 된다.

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

다른 에러가 발생하는 코드가 있다. invalid syntax 문법 에러이다.
위의 사진을 참고한다면 **kwargs의 인수는 마지막의 위치해야한다.

def func_param_with_kwargs(name, age, address=0, **kwargs):

사진을 참고하여 **kwargs를 마지막에 위치 시키면 문제없이 출력된다.

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

invalid syntax 문법 에러가 발생하는 코드가 있다. **kwargs 위치를 마지막에 위치시켜도

def mixed_params(name="아이유", *args, age, address, **kwargs):

에러가 발생한다 age값이 없다는 에러이다.

def mixed_params(name="아이유", *args, age, address, **kwargs):
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")

위 코드를 보면 name = 20, args ( 정우성, 01012341234, male ) address = seoul, kwargs ( mobile : 01012341234 ) 가 들어 가지만 키워드 값인 age가 값이 없다.
따라서,

mixed_params( "정우성", "01012341234", "male" , age = 20, mobile="01012341234", address="seoul")

이와 같이 20이였던 인자를 위치 인자 뒤에 위치시키고 age = 20로 수정하면 에러 없이 출력 된다.

profile
안녕하세요

0개의 댓글