python-lib) functools - partial

최대 1 분 소요

functools.partial

  • functools.partial은 다양한 argument를 가지는 함수에 대해서, 특정한 argument를 제한하여, 좁은 기능의 function을 리턴해주는 함수를 말합니다.
  • 가령, func(a, b, c)라는 함수가 있을 때, a의 값을 특정 값으로 고정하고, b, c만 input으로 받아들이는 함수를 만든다는 것이죠.
  • 매우 간단한 예를 들어보겠습니다. 우리에게는 다음과 같이 base^exponent를 리턴해주는 함수가 있습니다.
def power(base, exponent):
    return base**exponent
  • power 함수의 기능을 줄여서, base를 3으로 한정하여, 3의 제곱수만을 리턴하는 함수를 생성하고 싶다고 하겠습니다.
  • 이 때, functools.partial를 사용해서 다음과 같이 새로운 함수를 만들어 줄 수 있습니다.
from functools import partial

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

# 3의 제곱수를 리턴하는 함수
power_three = partial(power, base=3)
# 4의 제곱수를 리턴하는 함수
power_four = partial(power, base=4)

print(power_three(exponent=2)) # 9 
print(power_three(exponent=3)) # 27

by closure

  • 사실, 위에서는 functools.partial를 사용하기는 했지만, 그냥 직접 제한된 함수를 만들어서 사용할 수도 있죠.
  • closure는 “함수 안에서 새로운 함수를 정의하고, 이 함수를 리턴해서 main함수에서 사용할 수 있도록 하는것”을 말합니다. 어려워보이지만 아래 코드를 보면 쉽게 이해될 거에요.
def power_func(exponent):
    def r_func(base):
        return base**exponent
    return r_func
square = power_func(2)
cube = power_func(3)
print(square(7))

댓글남기기