그럼 args
, kwargs
는 언제 쓸까?
def get_birth_year(age):
return 2021 - age + 1
# easy solution
def print_personal_info_easy(name, height, age=None):
print(f"name: {name}")
print(f"height: {height}")
if age is not None:
birth_year = get_birth_year(age)
print(f"birth_year: {birth_year}")
# if there are too many variables which are optional...
def print_personal_info(name, height, **kwargs):
print(f"name: {name}")
print(f"height: {height}")
if "age" in kwargs:
birth_year = get_birth_year(kwargs["age"])
print(f"birth_year: {birth_year}")
# 보통은 args, kwargs 모두 passing하기 위해서
def print_personal_info_full(name, height, *args, **kwargs):
print(f"name: {name}")
print(f"height: {height}")
print(f"args: {args}")
print(f"kwargs: {kwargs}")
if "age" in kwargs:
birth_year = get_birth_year(kwargs["age"])
print(f"birth_year: {birth_year}")
print_personal_info 함수의 출력과 결과는 다음과 같다.
# position args, keyword args 섞어서
print_personal_info(height=162, name="yk")
print_personal_info(height=200, name="girin", age=383)
print_personal_info("girin", height=200, age=400)
name: yk
height: 162
name: girin
height: 200
birth_year: 1639
name: girin
height: 200
birth_year: 1622
print_personal_info_full 함수의 출력과 결과는 다음과 같다.
# position args, keyword args 섞어서
print_personal_info_full("girin", 200, 2342, 23123, 34324, address="adf", age=258)
name: girin
height: 200
args: (2342, 23123, 34324)
kwargs: {'address': 'adf', 'age': 258}
birth_year: 1764
추가내용: 함수에 인자를 넣을 때, *
, **
사용해서 넣기
"""
*을 사용해 보아요
"""
print("*을 사용해 보아요")
variables = [3, 5]
# * 없이 index로 넣기
print("* 없이 index로 넣기")
print_variable_no_args(variables[0], variables[1])
# *을 사용해서 넣기
print("*을 사용해서 넣기")
print_variable_no_args(*variables)
"""
**을 사용해 보아요
"""
print("**을 사용해 보아요")
variable_dict = {"x": 3, "y": 5}
# ** 없이 dict key로 value 찾아서 넣기
print("** 없이 dict key로 value 찾아서 넣기")
print_variable_no_args(variable_dict["x"], variable_dict["y"])
# **을 사용해서 넣기
print("**을 사용해서 넣기")
print_variable_no_args(**variable_dict)
결과는 다음과 같다.
*을 사용해 보아요
* 없이 index로 넣기
x: 3
y: 5
*을 사용해서 넣기
x: 3
y: 5
**을 사용해 보아요
** 없이 dict key로 value 찾아서 넣기
x: 3
y: 5
**을 사용해서 넣기
x: 3
y: 5
args
, kwargs
사용하는 최종 버전
def use_man_nai(korean_age, *args, **kwargs):
print("use_man_nai의 args, kwargs")
print(f"args: {args}")
print(f"kwargs: {kwargs}")
if korean_age:
return 1
else:
return 0
def get_birth_year_full(age, *args, **kwargs):
print("get_birth_year_full의 args, kwargs")
print(f"args: {args}")
print(f"kwargs: {kwargs}")
return 2021 - age + use_man_nai(**kwargs)
def print_personal_info_master(name, height, *args, **kwargs):
print("print_personal_info_master의 args, kwargs")
print(f"name: {name}")
print(f"height: {height}")
print(f"args: {args}")
print(f"kwargs: {kwargs}")
birth_year = get_birth_year_full(**kwargs)
print(f"birth_year: {birth_year}")
print_personal_info_master(name="yk",
height=162,
age=26,
korean_age=True,
favorite_food="Mushroom Cream Soup")
결과는 다음과 같다.
print_personal_info_master의 args, kwargs
name: yk
height: 162
args: ()
kwargs: {'age': 26, 'korean_age': True, 'favorite_food': 'Mushroom Cream Soup'}
get_birth_year_full의 args, kwargs
args: ()
kwargs: {'korean_age': True, 'favorite_food': 'Mushroom Cream Soup'}
use_man_nai의 args, kwargs
args: ()
kwargs: {'favorite_food': 'Mushroom Cream Soup'}
birth_year: 1996