python - 卡住函数参数

标签 python function object operator-overloading decorator

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

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')

打印:某个值

frozenfunc.call(a='theupdatedvalue')

打印:更新值

有类似的东西我还没找到吗?

更新:函数 partial来自图书馆functools执行几乎相同的任务。

最佳答案

特殊方法__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

关于python - 卡住函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34200717/

相关文章:

python - 重新训练初始时,Tensorflow 无法创建新的可写文件

python 3 : How do I get a string literal representation of a byte string?

python - 将目录更改为 Python 脚本的目录

Python:如何关闭我的 CSV 输入和输出文件?

python - 尝试创建函数以提取特殊字符之间的切片

c++ - 变量总是在函数中重置为默认值

c - 在 C 中的二维数组中划分行时遇到问题

javascript - 将对象插入到数组 Javascript/JQuery 的特定位置

php - 掌握基础知识的简单面向对象练习

java - 创建带有填充变量且没有任何 setter 或构造函数的对象