파이썬 패킹 실전예제 20개

패킹(packing)은 여러 값을 하나의 변수에 모으는 기능입니다. 튜플 패킹, 리스트/딕셔너리 패킹, 함수 인자 패킹(*args, **kwargs)을 중심으로 실전에서 자주 만나는 예제를 20개로 정리했습니다.

핵심 정리

패킹이란?

자주 쓰는 패킹 형태

형태의미
a = 1, 2, 3튜플로 패킹
def f(*args)위치 인자 패킹
def f(**kwargs)키워드 인자 패킹
[*a, *b]여러 시퀀스를 하나로 묶기
{**x, **y}여러 딕셔너리 병합

학습 포인트

  • 튜플 패킹은 쉼표가 핵심입니다.
  • *args는 개수가 정해지지 않은 값을 받을 때 유용합니다.
  • **kwargs는 옵션을 유연하게 받을 때 자주 사용됩니다.
  • 리스트·튜플·세트·딕셔너리 결합에도 패킹 문법이 널리 쓰입니다.
예제 1

가장 기본적인 튜플 패킹

a = 10, 20, 30
print(a)
print(type(a))
설명

쉼표로 값을 나열하면 자동으로 하나의 튜플로 묶입니다. 괄호가 없어도 패킹이 일어납니다.

예상 결과 (10, 20, 30) <class 'tuple'>
예제 2

문자열 여러 개를 하나로 패킹

words = 'python', 'is', 'fun'
print(words)
설명

문자열도 마찬가지로 하나의 튜플에 묶입니다. 여러 값을 한 번에 저장하고 싶을 때 간단히 사용할 수 있습니다.

예상 결과 ('python', 'is', 'fun')
예제 3

한 개짜리 튜플 패킹

x = 5,
print(x)
print(type(x))
설명

값이 하나여도 쉼표가 있으면 튜플입니다. (5)는 정수이지만 (5,) 또는 5,는 튜플입니다.

예상 결과 (5,) <class 'tuple'>
예제 4

입력된 값을 패킹해서 저장

name = 'Kim'
age = 17
grade = 2
student = name, age, grade
print(student)
설명

서로 다른 자료형도 하나의 튜플로 묶을 수 있습니다. 학생 정보, 좌표, 설정값 등에 많이 쓰입니다.

예상 결과 ('Kim', 17, 2)
예제 5

함수에서 여러 반환값 만들기

def calc(a, b):
    return a + b, a - b, a * b

result = calc(8, 3)
print(result)
설명

함수에서 여러 값을 반환하면 실제로는 튜플로 패킹되어 돌아옵니다. 파이썬에서 매우 자주 쓰이는 패턴입니다.

예상 결과 (11, 5, 24)
예제 6

좌표 데이터를 패킹해서 다루기

point = 3, 7
print(f'x좌표: {point[0]}, y좌표: {point[1]}')
설명

좌표처럼 순서가 중요한 데이터를 하나로 묶어 저장할 때 튜플 패킹이 적합합니다.

예상 결과 x좌표: 3, y좌표: 7
예제 7

반복문에서 값들을 패킹해서 추가

pairs = []
for i in range(1, 4):
    pairs.append((i, i ** 2))
print(pairs)
설명

반복문 안에서 관련된 값들을 튜플로 패킹하여 리스트에 저장하면 표처럼 구조화된 데이터를 만들 수 있습니다.

예상 결과 [(1, 1), (2, 4), (3, 9)]
예제 8

zip 결과를 튜플 묶음으로 보기

names = ['A', 'B', 'C']
scores = [90, 80, 100]
result = list(zip(names, scores))
print(result)
설명

zip()은 각 위치의 값을 모아 튜플로 만들어 줍니다. 즉, 자동 패킹이 일어나는 대표적인 예입니다.

예상 결과 [('A', 90), ('B', 80), ('C', 100)]
예제 9

*args로 위치 인자 패킹 받기

def add_all(*args):
    print(args)
    return sum(args)

print(add_all(1, 2, 3, 4, 5))
설명

*args는 전달된 위치 인자들을 하나의 튜플로 패킹합니다. 개수가 가변적인 입력을 받을 때 유용합니다.

예상 결과 (1, 2, 3, 4, 5) 15
예제 10

*args로 최대값 찾기

def my_max(*nums):
    return max(nums)

print(my_max(7, 2, 19, 4))
설명

숫자 개수가 달라도 모두 튜플로 모인 뒤 함수 안에서 한꺼번에 처리할 수 있습니다.

예상 결과 19
예제 11

**kwargs로 키워드 인자 패킹 받기

def profile(**kwargs):
    print(kwargs)

profile(name='Lee', age=18, school='Science High')
설명

**kwargs는 키워드 인자들을 하나의 딕셔너리로 패킹합니다. 옵션값이나 설정값을 받을 때 매우 많이 사용됩니다.

예상 결과 {'name': 'Lee', 'age': 18, 'school': 'Science High'}
예제 12

**kwargs로 옵션 처리하기

def settings(**options):
    for k, v in options.items():
        print(k, '=>', v)

settings(theme='dark', lang='ko', font_size=14)
설명

미리 정해 두지 않은 다양한 옵션을 유연하게 받을 수 있다는 점이 **kwargs의 장점입니다.

예상 결과 theme => dark lang => ko font_size => 14
예제 13

일반 매개변수와 *args 함께 쓰기

def intro(title, *names):
    print(title)
    print(names)

intro('참가자 목록', '민수', '서연', '지우')
설명

앞쪽의 일반 매개변수는 고정값을 받고, 남은 위치 인자들은 *names가 튜플로 패킹합니다.

예상 결과 참가자 목록 ('민수', '서연', '지우')
예제 14

일반 매개변수와 **kwargs 함께 쓰기

def make_student(name, **info):
    print('이름:', name)
    print('추가정보:', info)

make_student('지민', age=17, club='math')
설명

필수 정보는 따로 받고, 추가 정보는 딕셔너리로 모아 받는 구조입니다. 실무에서도 자주 보이는 패턴입니다.

예상 결과 이름: 지민 추가정보: {'age': 17, 'club': 'math'}
예제 15

*args와 **kwargs를 동시에 사용

def show_all(*args, **kwargs):
    print('args =', args)
    print('kwargs =', kwargs)

show_all(1, 2, 3, name='Kim', level='A')
설명

위치 인자는 튜플로, 키워드 인자는 딕셔너리로 각각 패킹됩니다. 두 종류를 한 함수에서 모두 처리할 수 있습니다.

예상 결과 args = (1, 2, 3) kwargs = {'name': 'Kim', 'level': 'A'}
예제 16

리스트 여러 개를 하나의 리스트로 묶기

a = [1, 2]
b = [3, 4]
c = [*a, *b]
print(c)
설명

여기서는 *를 이용해 각 리스트의 원소를 꺼내 새 리스트에 넣습니다. 결과적으로 여러 시퀀스를 하나로 모으는 패킹 형태로 볼 수 있습니다.

예상 결과 [1, 2, 3, 4]
예제 17

튜플과 리스트를 함께 묶기

t = (10, 20)
lst = [30, 40]
merged = [*t, *lst, 50]
print(merged)
설명

튜플, 리스트처럼 서로 다른 시퀀스 자료형도 *를 사용해 같은 리스트 안으로 모을 수 있습니다.

예상 결과 [10, 20, 30, 40, 50]
예제 18

딕셔너리 여러 개를 하나로 묶기

basic = {'name': 'Yuna', 'age': 18}
extra = {'school': 'High School', 'grade': 3}
student = {**basic, **extra}
print(student)
설명

**를 사용하면 여러 딕셔너리의 키-값 쌍을 하나의 새 딕셔너리로 모을 수 있습니다.

예상 결과 {'name': 'Yuna', 'age': 18, 'school': 'High School', 'grade': 3}
예제 19

함수 호출용 딕셔너리 만들기

common = {'sep': ' / ', 'end': ' 끝!\n'}
print('A', 'B', 'C', **common)
설명

여러 설정값을 딕셔너리로 모아 두었다가 함수 호출 때 넘기면 재사용성이 좋아집니다. 딕셔너리에 미리 패킹해 둔 옵션을 활용하는 예입니다.

예상 결과 A / B / C 끝!
예제 20

실전형 종합 예제: 주문 정보 모으기

def order_summary(customer, *items, **options):
    print('고객:', customer)
    print('상품들:', items)
    print('옵션들:', options)

order_summary(
    '김인수',
    '노트북', '마우스', '키보드',
    payment='card',
    delivery='express'
)
설명

고객 이름은 일반 매개변수, 상품 목록은 *items로 튜플 패킹, 결제/배송 옵션은 **options로 딕셔너리 패킹합니다. 실전에서 가장 자주 보는 종합 구조입니다.

예상 결과 고객: 김인수 상품들: ('노트북', '마우스', '키보드') 옵션들: {'payment': 'card', 'delivery': 'express'}
포인트: 패킹을 잘 이해하면 함수 설계가 훨씬 유연해지고, 여러 데이터를 구조적으로 다루기 쉬워집니다.
마무리

꼭 기억할 핵심

패킹은 짧아 보여도 매우 강력한 문법입니다. 함수, 자료구조, 반복 처리, 옵션 설계까지 폭넓게 연결되므로 꼭 익혀 두면 좋습니다.