파이썬 functools.partial 함수

최대 1 분 소요

python을 딥하게 공부하기 위한 목적으로 django를 보고 있다. django.urlspath 함수의 시그니처가 궁금하여 살펴보다가 아래 구문을 발견했다.

path = partial(_path, Pattern=RoutePattern)

뭐지? partial은 무슨 함수지? 다른 언어에서 보지못한 생소한 느낌이다. 그래서 한번 살펴보았다.

개념은 간단하다. 단순히 기존의 함수와 구현은 동일하고 파라메터만 미리 정해준 또 다른 함수를 생성한다.

아래 예를 보자.

from functools import partial

def power(base, exponent):
    return base ** exponent

power는 밑이 base인 수의 지수(exponent)승를 반환하는 함수이다.

이때 만약 특정 정사각형의 면적을 구하는 함수 square를 구현하고 싶다면?

def square(arm):
    return arm ** 2

위와 같이 구현하면 된다. 이때 power 함수를 재사용할 수 있다.

square = partial(power, exponent=2)

더 심플하다.

단순히 파라메터만 미리 지정해준다. 함수 오버로딩, 오버라이딩 개념과는 상관없고, 객체지향의 trait처럼 구현을 재사용하는 개념과 비슷하다. 단, 대상이 함수라는 것.

http://www.incodom.kr/%ED%8C%8C%EC%9D%B4%EC%8D%AC/%ED%95%A8%EC%88%98 에도 잘 설명되어 있지만 조금 딥하다. 나중에 더 파봐야할듯!

참고: https://hamait.tistory.com/823

카테고리:

업데이트: