Discuss / Python / 自己实现一个 partial 偏函数

自己实现一个 partial 偏函数

Topic source
class partial:
    def __new__(cls, func, *args, **kwargs):
        if not callable(func):
            raise TypeError("the first argument must be callable")
        self = super().__new__(cls)

        self.func = func
        self.args = args
        self.kwargs = kwargs
        return self

    def __call__(self, *args, **kwargs):
        return self.func(*self.args, *args, **self.kwargs, **kwargs)

使用:

def add(x, y):
    return x + y

inc = partial(add, y=1)
print(inc(41))  # 42

你这样太超前了,写了个类还是超类,看的一脸懵逼

我发现上面的 __call__ 不支持覆盖参数,更新下:

    def __call__(self, *args, **kwargs):
        newkeywords = self.kwargs.copy()
        newkeywords.update(kwargs)
        return self.func(*self.args, *args, **newkeywords)

陈泰迪

#4 Created at ... [Delete] [Delete and Lock User]

超纲了啊喂!

梦里昭华

#5 Created at ... [Delete] [Delete and Lock User]

我看了你的回答觉得你的水平很高,我有个问题想请教,希望可以得到你的回复: 例子中: import functools max2=functools.partial(max,10) 这个偏函数解释是10自动加到了args的左边 因为参数的章节说的可变参数是可以任意数量的对吧,args是可变参数的话,那比如我想把10和20甚至更多的数作为默认参数放在max2中我该怎么是实现呢? 希望你可以回复我 谢谢

@ 梦里昭华 直接加就行 max2 = functools.partial(max, 10,20)

加任何多的默认变量都是直接加即可,除非你想用关键字参数,而max函数的关键字参数为key函数,所以如果你在偏函数中指定了key的话,key前面的为可变参数,而key的部分为关键字参数。

Junhong1994

#8 Created at ... [Delete] [Delete and Lock User]

关键字参数不是什么key函数,是含参数名的参数。 关键字参数在函数内部自动组装成dict类型,即{key:value} 而可变参数在函数内部自动组成成元组类型

#@ 梦里昭华

#import functools

#def max2(*n):

return functools.partial(max,*n)

#d=max2(1,2,3,4,5)#自己任意写多少个默认参数个数

#d(10,13,20)#实现偏函数的调用


  • 1

Reply