Python

Functools 의 Partial 이란?

[하마] 이승현 (wowlsh93@gmail.com) 2017. 4. 17. 20:29


functools.partial 에 대한 설명


  • 하나 이상의 인수가 이미 채워진 함수의 새 버전을 만들기 위해 사용된다.

  • 함수의 새 버전은 그 자체를 기술 하고 있다.


functools.partial 에 대한 데모


첫째, 지수를 명시적으로 수행하는 함수를 만든다고 하자. (파이썬의 내장된 pow () 함수와 비슷하다)

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


이제 정해진 지수 2와 3을 갖는 전용 사각형 및 큐브 함수를 원한다면 어떻게 될까?
이때 우리는 다음과 같이 할 수 있을 것이다.

def square(base):
    return power(base, 2)

def cube(base):
    return power(base, 3)


이 방법이 나름 효과적이지만 power() 함수의 변형을 15 개 또는 20 개 만들려면 어떻게 해야 할까? 1000개는? 그렇게 많은 반복적인 코드를 작성하는 것은 말할 필요도 없이 짜증나는 일이다. 이런 일을 해야할때 partials를 사용한다.

사각형과 큐브 함수를 다시 작성해 보자.

from functools import partial

square = partial(power, exponent=2)
cube = partial(power, exponent=3)

def test_partials():
    assert square(2) == 4
    assert cube(2) == 8

우와! 굿


이 부분함수에 대한 속성은 아래와 같이 기술 할 수 있다.

def test_partial_docs():
    assert square.keywords == {"exponent": 2}
    assert square.func == power

    assert cube.keywords == {"exponent": 3}
    assert cube.func == power