python – functools.partial以及它如何组成非关键字参数

我发现functools.partial有很多很好的用例.

但是,我发现需要定义我所谓的partial_right.这就像是偏袒的,但是将“非正义”与非“k”结合起来.

我的问题是……我需要partial_right,还是我错过了什么?我可以用partial()或其他技术实现我想要的东西.

functools.partial实现如下:

def partial(func, *args, **keywords):
    def newfunc(*fargs, **fkeywords):
        newkeywords = keywords.copy()
        newkeywords.update(fkeywords)
        return func(*(args + fargs), **newkeywords)
    ...

这是“(args fargs)”的排序,这是我的问题.这个顺序对某些目的很有用,但我发现我需要相反的顺序:

def partial_right(func, *args, **keywords):
    def newfunc(*fargs, **fkeywords):
        ...
        return func(*(fargs + args), **newkeywords)
    ...

一个这样的用例是当代码通过该方法上的一些装饰器构建“动态”方法时.此时不知道’self’的值:

 class SomeClass(object):
     @decorator(a_value, b_value)
     def my_method(self, a, b):
         ...

在我的用例中,除了’self’之外,my_method的所有参数都是已知的.因此partial_right用于动态创建等效于:

  def my_method_dynamic(self):
     self.my_method(a_value, b_value)

最佳答案 对于您的特定用例,使用
operator.methodcaller可能更合适:

import operator
my_method_dynamic = operator.methodcaller('my_method', a_value, b_value)
my_method_dynamic(obj) # calls obj.my_method(a_value, b_value)
点赞