파이썬에서 * 기호는 여러 맥락에서 쓰입니다. 대표적으로 가변 인자와 시퀀스 언패킹이 있는데, 비슷해 보이지만 동작 방식은 다릅니다
1. 가변 인자 *args
함수 정의에서 *args는 개수가 정해지지 않은 인자들을 받을 때 사용합니다.
이 값들은 항상 **튜플(tuple)**로 패킹됩니다.
def demo(*args):
print(args, type(args))
demo(1, 2, 3)
# 출력: (1, 2, 3) <class 'tuple'>
*args는 “들어온 인자를 모두 하나의 튜플로 묶어라”라는 의미입니다. 인자가 하나도 없으면 () 빈 튜플이 들어옵니다.
2. 시퀀스 언패킹
일반 할당문에서도 *을 쓸 수 있습니다.
이 경우에는 시퀀스를 풀어서 여러 변수에 나누어 담는 언패킹 동작을 합니다.
nums = (1, 2, 3, 4)
x, *rest = nums
print(x) # 1
print(rest) # [2, 3, 4] (리스트)
여기서 주목할 점은 rest가 리스트라는 것입니다. 시퀀스가 튜플이어도, 문자열이어도, *변수로 받으면 항상 리스트로 들어옵니다.
정리하면
- *args는 함수 정의에서 가변 인자를 패킹하는 문법 → 결과는 항상 튜플
- 시퀀스 언패킹은 일반 할당에서 나머지를 리스트로 언패킹하는 문법 → 결과는 리스트
- 두 문법은 모두 *을 쓰지만, 맥락과 결과가 다르다는 점이 중요합니다.
'파이썬 > 기초 프로그래밍' 카테고리의 다른 글
| 파이썬 NamedTuple 간단 정리 (0) | 2025.09.06 |
|---|---|
| 파이썬 데이터 모델링: 매직 메서드로 객체를 데이터처럼 다루기 (0) | 2025.09.06 |
| ()의 진짜 의미: 함수와 실행, 객체와 결과의 차이 (1) | 2025.06.22 |
| 파이썬 클로저(Closure): 변수와 스코프 개념 정리 (0) | 2025.06.22 |
| 래퍼(Wrapper)와 데코레이터(Decorator): 파이썬 함수 확장의 핵심 (0) | 2025.06.22 |