패킹과 언패킹
패킹(packing)과 언패킹(unpacking)은 단어의 뜻 그대로 요소들을 묶어주거나 풀어주는 것을 의미
list 혹은 dictionary의 값을 함수에 입력할 때 주로 사용됨
받을 인자의 개수가 정해져 있지 않을 떄.
== 받는 값 개수에 제한 없이 유동적으로 인자를 받고 싶을 때.
유용하게 사용할 수 있다.
list에서의 활용
def add(*args):
result = 0
for i in args:
result += i
return result
numbers = [1, 2, 3, 4]
print(add(*numbers)) # 10
""" 다 같은 코드임
print(add(*numbers))
print(add(*[1,2,3,4]))
print(add(1, 2, 3, 4))
"""
dictionary에서의 활용
def sample(**kwargs):
print(kwargs)
sample_dict = {
"key": "value",
"key2": "value2",
"key3": "value3",
}
sample(**sample_dict)
sample(key="value" key2="value2", key3="value3")
def set_profile(**kwargs):
profile = {}
profile["name"] = kwargs.get("name", "-")
profile["gender"] = kwargs.get("gender", "-")
profile["birthday"] = kwargs.get("birthday", "-")
profile["age"] = kwargs.get("age", "-")
profile["phone"] = kwargs.get("phone", "-")
profile["email"] = kwargs.get("email", "-")
return profile
user_profile = {
"name": "lee",
"gender": "man",
"age": 32,
"birthday": "01/01",
"email": "python@sparta.com",
}
print(set_profile(**user_profile))
# {
# 'name': 'lee',
# 'gender': 'man',
# 'birthday': '01/01',
# 'age': 32,
# 'phone': '-',
# 'email': 'python@sparta.com'
# }
""" 아래 코드와 동일
profile = set_profile(
name="lee",
gender="man",
age=32,
birthday="01/01",
email="python@sparta.com",
)
"""
같이도 쓸 수 있음!
def sample(a, b, *args, **kwargs):
print(a) # 1
print(b) # 2
print(args) # (3, 4, 5)
print(kwargs) # {'test': 'a', 'test_key': 'test_value'}
sample(1, 2, 3, 4, 5, test="a", test_key="test_value")
이런 형태의 함수를 많이 만날 수 있는데,
*, **을 보면 패킹과 언패킹을 활용한 문법이구나 라고 생각하면 된다.