如何在Python中参数化或使函数通用?

时间:2018-10-16 16:04:20

标签: python generics closures

我正在使用需要某些函数处理程序的Python库(APScheduler)。所有这些处理程序功能几乎相同。唯一的区别是“常数”(例如,逻辑是相同的;仅用于引用某些数据结构的常数不同)。

我希望所有处理程序都具有一个通用函数,这样我可以最小化代码,或者在添加新类型时不必添加新函数。而且,这使我可以在配置文件中声明我的类型。

在Javascript中,这可能是这样的:

function staticFunction(args) {
    // ... this function I have to parameterise
};

function factory(type) {
    return function(args) {
        // ... this function is parametrised with "type"
    };
}

addHandler(staticFunction)
addHandler(factory("apples"));
addHandler(factory("oranges"));

我如何在Python中做同样的事情?

1 个答案:

答案 0 :(得分:4)

您可以在Python中完成完全相同的操作;您可以创建一个嵌套函数,以封闭方式访问type

def factory(type):
    def nested(args):
        # do something with `type`
    return nested

add_handler(factory('apples'))

您可以通过多种方法将参数绑定到可调用对象。您可以使用lambda代理函数调用:

def static_function(type, args):
    # ...

add_handler(lambda args: static_function('apples', args))

或者您可以使用functools.partial() object将参数绑定到可调用对象:

from functools import partial

add_handler(partial(static_function, 'apples'))