가변인수 & 위치인수
🐚 Keyword Arguments
기존에 공부했던 함수는, 함수가 정의되었을 때의 parameter
순서대로 parameter
를 넘겨야했습니다. 하지만 keyword arguments
를 사용하면 더 편하고 명확하게 코드를 읽을수 있습니다.
예시
def name_and_age(my_name, my_age):
print(f"{my_name} is {my_age} years old")
name_and_age(my_name="Jang", my_age=25)
# "Jang is 25 years old"
Mixing positional arguments
순서대로 넣는 것은 positional arguments
라고 합니다. 함수를 호출할 때 positoinal arguments
와 keyword arguments
를 혼용할 수 있습니다.
def name_and_age(my_name, my_age):
print(f"{my_name} is {my_age} years old")
name_and_age("Jang", my_age=25)
# "Jang is 25 years old"
하지만 Positional arguments
는 순서를 지켜주어야 합니다. keyword arguments
는 순서가 달라져도 상관없지만 만약 호출을 아래와 같이하게되면,
name_and_age(my_age=25,"Jang")
SyntaxError
가 발생 할 것입니다.
Parameter Default Value
Parameter
의 default
값도 미리 정의해 줄 수 있습니다. 아래의 코드와 같이 정의해주면 호출할때 parameter
값을 정의하지 않아도 자동으로 채워지게 됩니다.
def name_and_age(my_name, my_age=25):
print(f"{my_name} is {my_age} years old")
name_and_age("Jang")
# "Jang is 25 years old"
🙋🏼 예상 질문
1
Q. 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안된다고 배웠습니다. 왜 안돼야만 한다고 생각합니까?
A. default value parameter
가 앞에 존재하면 함수를 호출할때 default
값이 있는 parameter
도 호출해야 하기 때문에 비효율적이기 때문이라고 생각합니다.
2
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)
위의 코드는 *args
가 name
뒤의 모든parameter
들을 가져오는데, 그러면 age
에 들어갈 parameter
가 남지 않게 됩니다. 오류를 고치기 위해서,
def func_param_with_var_args(name, *args):
print("name=",end=""), print(name)
print("args=",end=""), print(args[0:2])
print("age=",end=""), print(args[2])
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
위의 코드와 같이 작성하면 될것 같습니다.
3
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")
위의 코드는 **kwargs
가 뒤에 나오는 모든 key arguments
를 저장하는데 그렇게 되면 address
도 이미 **kwargs
에 들어가게 됩니다. 아래와 같이 코드를 변화시키면 오류가 해결될 것 같습니다.
def func_param_with_kwargs(name, age, **kwargs,):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(list(kwargs.items())[1][1])
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
4
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")
위의 코드는 첫번째로 age
가 호출될때 첫번째 parameter
로 들어가게 되는데 함수에서 정의된 순서는 세번째에 들어가있어서 가장 앞으로 꺼내주었습니다. 다른 방법으로는 20
의 순서를 뒤로 보내고 age``parameter
를 제거하고 *args
에서 꺼내오는 방법도 가능할 것 같습니다.
또한 **kwargs
와 address
도 이전 문제와 같이 잘못되어있어 같은 방식으로 해결했습니다.
def mixed_params(age, 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(list(kwargs.items())[1][1])
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
Author And Source
이 문제에 관하여(가변인수 & 위치인수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jun17114/가변인수-위치인수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)