카테고리 없음

패킹과 언패킹

kinggoddino 2024. 11. 22.

패킹과 언패킹

 

패킹(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")

 

이런 형태의 함수를 많이 만날 수 있는데, 

*, **을 보면 패킹과 언패킹을 활용한 문법이구나 라고 생각하면 된다.