我读过一些比较partial
与lambda
的参数,但大多数讨论的是{
我有一个接受单参数修饰符函数的函数。请求被传递到要修改的修饰符函数中:
def my_func(request, modifier):
modifier(request)
我还构建了一些实用程序,使创建参数化修饰符函数更容易,例如,向请求添加/修改URL参数。我想了两种方法,但不确定哪一种更好。在
这样,调用方可以使用functools.partial
绑定params
,如下所示:
modifier = functools.partial(add_params, params={'abc':'123'})
def add_params(params):
def func(request):
for param in params:
# Modify request with param.
return func
然后呼叫者就这样使用它:
modifier = add_params({'abc':'123'})
如果我不关心函数内省,那么使用选项2有什么缺点吗?选项2会遇到后期绑定问题吗?(尽管我的用例没有遇到这种情况)。我真的很喜欢选项2更容易被呼叫者使用。在
与部分函数实现代码相比,您的选项2也不错,我不认为它在您的情况。但是functools.partial是简化签名的常见方法, 如果要为另一个函数返回新的分部函数,仍然可以调用分部函数函数if如果要使用选项2模型,则可能需要实现一个新功能
从数学角度来看,这两个函数完全同构(尽管它们的效率可能有所不同):
出于您的目的,我认为选项2提供了最方便的功能,因为该函数已经被使用了,因此您不仅可以避免
^{pr2}$partial
,而且可以轻松地组合它们:如果要直接调用函数,则可以执行以下操作:
与方案1相比,这并不是全部内容:
除非使用函数外部的变量,否则后期绑定不应该引起问题,如果这样做,总有办法解决它。在
不幸的是,选项2的缺点是难以定义,但使用decorator可以简化这一点:
相关问题 更多 >
编程相关推荐