partial은 「함수의 일부 인자를 미리 채워 새 함수를 만드는」 도구입니다.
같은 함수를 다른 일부 인자로 여러 번 호출할 때 코드를 깔끔하게 해 줍니다.
기본 사용.
from functools import partial.
def power(base, exp): return base ** exp.
square = partial(power, exp=2).
square(5) — 25.
square(10) — 100.
power의 exp 인자가 미리 2로 채워진 새 함수 square가 만들어진 셈입니다.
전형적 활용 예시는 「콜백 함수」입니다.
button.on_click(lambda: greet("홍길동")) 대신 button.on_click(partial(greet, "홍길동"))로 더 명시적으로 표현할 수 있습니다.
람다는 익명이지만 partial은 함수와 인자가 분리되어 디버깅이 쉽습니다.
또 다른 활용: 「설정을 고정한 함수 만들기」.
open_utf8 = partial(open, encoding="utf-8") — 항상 utf-8로 열리는 open.
log_warning = partial(logger.log, level="WARNING") — 항상 경고 레벨로 로그.
같은 옵션을 반복하는 코드를 줄여 줍니다.
비유하자면 partial은 「자주 쓰는 음식의 "기본 세트"를 미리 만들어 두는」 일과 같습니다.
매번 「짜장면 보통, 양파 추가, 면 곱빼기」를 외치지 않고 「내 짜장 세트」를 정의해 두면 매번 한마디로 주문할 수 있는 셈입니다.
코드 간결성과 의도 명확성을 동시에 얻습니다.
한 줄 요약
functools.partial은 함수의 일부 인자를 미리 채워 새 함수를 만드는 도구로, 콜백 함수와 설정 고정에 자주 쓰여 코드를 깔끔하게 만들어 줍니다.
더 알아볼 것
- partial vs lambda — 언제 무엇을
- partialmethod — 메서드 버전
- operator 모듈과의 결합