冻结函数参数

2024-10-02 18:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个类,它提供输入函数的功能,但是会记住上次调用的参数,并且只会像字典一样更新它们。到目前为止我已经知道了,但我很想知道是否有更好的方法:

class freezefunc:
    def __init__(self, func, **funcargs):
        self.func = func
        self.funcargs = {}

    def call(self, **kwargs):
        self.funcargs.update(kwargs)
        self.func(**self.funcargs)

所以这是这样的:

def func(a):
    print a
frozenfunc = freezefunc(func)
frozenfunc.call(a='somevalue')

打印:somevalue

frozenfunc.call(a='theupdatedvalue')

打印:更新值

有没有这样的东西我还没找到?你知道吗

updatede:库functools中的函数partial执行非常类似的任务。你知道吗


Tags: 方法函数self功能参数字典defcall
1条回答
网友
1楼 · 发布于 2024-10-02 18:21:44

特殊方法__call__允许您直接调用frozenfunc

class freezefunc:
    def __init__(self, func, **funcargs):
        self.func = func
        self.funcargs = {}

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

def func(a):
    print(a)

现在:

frozenfunc = freezefunc(func)
frozenfunc(a='somevalue')

印刷品:

somevalue

以及:

frozenfunc(a='theupdatedvalue')

印刷品:

theupdatedvalue

相关问题 更多 >