AD JB Toolbox 01

Python 강좌 / 가변 인수와 언패킹: *args·**kwargs

*args는 추가 위치 인수를 튜플로 모으고 **kwargs는 추가 키워드 인수를 딕셔너리로 모읍니다. 호출할 때의 *·**는 반대로 모음의 값을 풀어 전달하며, 두 사용 위치를 구분해야 합니다.

수집과 펼치기의 방향

함수 정의의 별표는 인수를 모으고 호출의 별표는 항목을 펼칩니다. args와 kwargs는 관례적 이름이며 별표 문법이 실제 역할을 정합니다. 고정된 입력이 명확한 함수까지 모두 가변 인수로 만들면 허용하는 항목과 오류를 알아보기 어려워질 수 있습니다.

관련 동작과 지원 조건은 가변 인수와 언패킹: *args·**kwargs 관련 공식 문서에서 확인할 수 있습니다.

위치 표현 동작
정의 def f(*args) 추가 위치 인수를 튜플로 수집
정의 def f(**kwargs) 추가 키워드 인수를 딕셔너리로 수집
호출 f(*values) 반복 가능한 값의 항목을 위치 인수로 전달
호출 f(**options) 문자열 키의 매핑을 키워드 인수로 전달

전체 예제와 실행 결과

별도의 실습 폴더에서 아래 파일을 UTF-8로 저장합니다. 가상환경을 선택한 터미널에서 python varargs.py 명령으로 실행합니다. macOS·Ubuntu에서 가상환경을 사용하지 않는 경우 명령 이름을 python3으로 바꿉니다.

varargs.py 파일의 전체 내용입니다.

def total(*amounts, fee=0):
    return sum(amounts) + fee

def describe(**fields):
    return ", ".join(f"{key}={value}" for key, value in sorted(fields.items()))

values = [3500, 8000, 2500]
print(total(*values, fee=500))
options = {"category": "food", "currency": "KRW"}
print(describe(**options))

예상 결과는 다음과 같습니다.

14500
category=food, currency=KRW

중복 키와 잘못된 펼치기

**로 넘기는 키는 문자열이어야 하고 대상 함수가 받는 이름과 맞아야 합니다. f(amount=1, **{"amount": 2})처럼 같은 인수를 두 번 전달하면 TypeError가 발생합니다. 딕셔너리를 합치는 동작과 함수 호출의 중복 인수 규칙은 같지 않습니다.

문자열에 *를 쓰면 문자 하나씩 펼쳐집니다. total(*"123")은 숫자 123 하나를 보내는 코드가 아닙니다. 인수 개수가 많거나 뜻이 불분명하면 명시적인 리스트 매개변수 하나를 받는 설계가 더 적절할 수 있습니다.

인터페이스를 넓히기 전에 확인할 것

가변 키워드 인수를 받는다고 검증하지 않은 옵션을 외부 API나 SQL에 그대로 넘기지 않습니다. 허용 목록과 필수 필드를 확인한 뒤 전달하세요. 단순 편의 때문에 오타를 조용히 수용하면 문제를 찾기 어려워집니다.

  1. values에 0을 추가해 합계가 같은지 확인합니다.
  2. fee를 지정하지 않으면 기본값 0이 적용되는지 확인합니다.
  3. describe에 같은 이름의 키워드를 두 번 전달하려고 해 실패 원인을 확인합니다.
같은 카테고리의 다른 글
Python 강좌 / Python이란? 특징과 활용 분야

Python 강좌 / Python이란? 특징과 활용 분야

Python의 역할과 활용 범위를 이해하고 소스 파일·터미널·인터프리터를 구분합니다. 간단한 합산 예제를 실행하며 강좌의 실습 방식을 익힐 수 있습니다.

Python 강좌 / for·range·enumerate·zip으로 반복하기

Python 강좌 / for·range·enumerate·zip으로 반복하기

for·range·enumerate·zip의 용도를 비교합니다. 번호와 지출 항목을 함께 출력하며 범위의 끝 제외, zip의 길이 불일치와 반복 중 변경 문제를 확인합니다.

Python 강좌 / Windows에 Python 설치하고 실행 확인하기

Python 강좌 / Windows에 Python 설치하고 실행 확인하기

공식 Python Install Manager로 Windows 실행 환경을 준비합니다. 기존 설치 확인, 프로젝트용 가상환경 생성, 명령 충돌과 실행 경로 점검까지 설명합니다.

Python 강좌 / 변수의 범위와 변경 가능한 객체의 동작 이해하기

Python 강좌 / 변수의 범위와 변경 가능한 객체의 동작 이해하기

지역·외부 변수와 객체 참조를 구분합니다. 대입·얕은 복사·중첩 리스트 예제로 함수가 원본을 바꾸는 범위와 설계 기준을 설명합니다.

Python 강좌 / macOS·Ubuntu에서 Python 실행 환경 준비하기

Python 강좌 / macOS·Ubuntu에서 Python 실행 환경 준비하기

macOS와 Ubuntu의 Python 설치 경로를 확인하고 개발용 가상환경을 만듭니다. 시스템 Python 보호, 배포판 버전 차이와 설치 오류의 확인 기준을 함께 다룹니다.

Python 강좌 / 리스트 만들고 항목 추가·수정·삭제하기

Python 강좌 / 리스트 만들고 항목 추가·수정·삭제하기

리스트의 추가·수정·삭제와 정렬을 실행 예제로 확인합니다. sort와 sorted, 얕은 복사, 빈 목록과 반복 중 변경의 차이를 설명합니다.

Python 강좌 / 튜플과 시퀀스 언패킹 이해하기

Python 강좌 / 튜플과 시퀀스 언패킹 이해하기

튜플 생성과 언패킹, 별표 수집과 값 교환을 익힙니다. 불변성의 범위와 항목 수 오류, 리스트·딕셔너리와의 선택 기준을 설명합니다.

Python 강좌 / 조건과 반복 종합 실습: 점수 집계 프로그램

Python 강좌 / 조건과 반복 종합 실습: 점수 집계 프로그램

점수 집계 프로그램으로 조건문·반복문·리스트를 연결합니다. 유효 범위, 합격 경계, 빈 입력과 제외 개수를 확인하며 평균 계산을 검증합니다.

Python 강좌 / while·break·continue로 반복 제어하기

Python 강좌 / while·break·continue로 반복 제어하기

while의 종료 조건과 break·continue의 실행 범위를 설명합니다. 지출 입력 반복 예제로 빈 입력·음수·종료 문자를 처리하고 무한 반복 원인을 확인합니다.

Python 강좌 / 집합으로 중복 제거하고 자료형 선택하기

Python 강좌 / 집합으로 중복 제거하고 자료형 선택하기

집합의 중복 제거와 합집합·교집합·차집합을 익힙니다. 허용 분류 검증 예제로 순서·횟수 정보와 remove·discard의 차이를 확인합니다.