Python

[Python] functools.partial - 함수 재활용

비번변경 2022. 10. 31. 21:59

개요

2022.07.04 - [functools] reduce 함수에 이어 functools 모듈의 partial 함수에 대해 알아본다.

 

 

partial

 partial 함수는 함수 이름과 그 인자 값을 전달받아 하나 이상의 인자가 채워진 함수를 생성하기 위해 사용한다.

functools.partial(func, *args, **kwargs)

 

 

예시

아래와 같이 두 수의 곰셉을 계산하는 multiply 함수가 있다고 하자.

def multiply(x, y):
    return x * y

만약 이 함수의 x가 5이고, 7이고 9인 함수를 정의해야 한다면 partial 함수를 이용해 아래와 같이 선언하여 사용할 수 있다.

import functools

def multiply(x, y):
    return x * y


five_mul = functools.partial(multiply, 5)
print(five_mul(2))

functools.partial

partial 함수는 *args와 **kwargs로 호출되는 함수처럼 동작하는 partial 객체를 반환한다. 생성된 partial 객체는 호출 가능한(callable) 객체이며, 세 개의 속성을 가진다.

    • partial.func : 호출 가능한 객체 또는 함수. partial 객체를 호출하면 새 매개변수를 사용해 func으로 전달된다.
    • partial.args : partial 객체 호출 시 전달되는 매개변수. 왼쪽부터 순서대로 채워진다.

partial.args

    • partial.keywords : partail 객체 호출 시 전달되는 **kwargs.

partial.keywords
partial 객체 속성

 

💡 Airflow Python Operator 사용 시, op_args 또는 op_kwargs 속성을 이용해 함수의 매개변수를 전달해야 한다.
하지만 partial 함수를 사용하면 op_args 또는 op_kwargs 속성을 사용하지 않고도 실행할 함수에 매개변수를 전달할 수 있다.

 

 

 

참고 문서

https://kukuta.tistory.com/329

https://siddharth1.medium.com/partial-functions-in-python-functools-partial-with-applications-and-examples-b65114ba82fb