보통 리스트 값을 꺼내기 위해서 반복문을 사용합니다.
✅ 리스트 Unpacking
목적은 다르지만 비슷한 기능으로 리스트 unpacking 기능을 사용할 수도 있습니다.
list unpacking 기능은 주로 인수의 개수가 정해지지 않은 가변 인수(variable argument)에 사용합니다.
다음과 같이 표현하며 같은 함수에 인수를 1개를 넣을수도, 10개를 넣을수도 또는 넣지 않을 수도 있습니다.
매개변수 이름은 관습적으로 args를 사용하며 이 값은 튜플 타입으로 반복문 사용이 가능합니다.
>>> def test_func(*args):
for arg in args:
print(arg)
>>> test_func("테스트 1", "테스트 2", "테스트 3")
테스트 1
테스트 2
테스트 3
이렇듯 리스트(튜플) unpacking 기능은 함수 매개변수로 주로 사용하지만, 다음과 같이 활용할 수도 있습니다.
>>> x = [10, 20, 30, 40]
>>> print(*x)
10 20 30 40
이러한 특징을 이용하면 반복문 없이 리스트 값을 간편하게 출력할 수도 있습니다.
✅ 딕셔너리 Unpacking
리스트 Unpacking과 같은 원리로 다음과 같이 딕셔너리 값에 키워드 인자로 적용됩니다.
>>> def test_func(**args):
for title, arg in args.items():
print('{} : {}'.format(title, arg))
>>> test_func(첫_테스트='테스트 1', 두번째_테스트='테스트 2')
첫_테스트 : '테스트 1'
두번째_테스트='테스트 2'
이러한 방식을 Unpacking 하여 활용하려면, key와 value로 구성되어 있는 mapping 타입, dict가 필요합니다.
def calc(first, op, second):
if op == '+':
return first + second
elif op == '/':
return first / second
elif op == '-':
return first - second
elif op == '*':
return first * second
prob = {
'first' : 12,
'second' : 34,
'op' : '*'
}
calc(**prob)
위에서 설명한 리스트 Unpacking, 딕셔너리 Unpacking 방식을 이용하면,
어떤 함수에도 반응하는 함수 작성이 가능해집니다.
아래 코드는 리스트와 딕셔너리 Unpacking 방식을 *args와 **kwargs 변수를 이용해
매개변수로 지정된 함수의 매개변수가 어떤 값으로 들어와도 모두 대응할 수 있습니다.
>>> def start(func, *args, **kwargs):
print("함수 시작!")
return func(*args, **kwargs)
>>> def sum_a_b(a, b):
return a+b
>>> start(print, '안녕하세요', 'Unpacking기능 완전 럭키비키잖아-!', sep='~')
함수 시작!
안녕하세요~~ Unpacking기능 완전 럭키비키잖아-!
>>> result = start(sum_a_b, 1, 2)
함수 시작!
>>> print(result)
3