我正在使用需要某些函数处理程序的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中做同样的事情?
答案 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'))