python - 如何将包装函数与 functools.partial 进行比较?

标签 python functools

如果我定义我的函数如下:

def myfunc(arg1, arg2):
    pass

然后 myfunc == myfunc 将返回 True

但是 functools.partial(myfunc, arg2=1) == functools.partial(myfunc, arg2=1) 将返回 False

为了单元测试的目的,有没有一种简单的方法来测试部分函数是否是我期望的?

最佳答案

测试funcargskeywords 属性是否相同:

p1.func == p2.func and p1.args == p2.args and p1.keywords == p2.keywords

其中 p1p2 都是 partial() 对象:

>>> from functools import partial
>>> def myfunc(arg1, arg2):
...     pass
... 
>>> partial(myfunc, arg2=1).func == partial(myfunc, arg2=1).func
True
>>> partial(myfunc, arg2=1).args == partial(myfunc, arg2=1).args
True
>>> partial(myfunc, arg2=1).keywords == partial(myfunc, arg2=1).keywords
True

有一个bug filed in the Python tracker向本质上执行此操作的 partial 对象添加相等性测试,但由于没有 __eq__ 方法会影响函数的行为而被拒绝,函数的行为也只是相等的如果他们的 id() 匹配。

关于python - 如何将包装函数与 functools.partial 进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32786078/

相关文章:

python - 在 python 中的 xml 或 html 文件的标签之间获取数据的简单方法?

python - Total_ordering 和类继承

python - functools reduce 就地修改原始数据框

python - 如何扩展 functools.wraps 装饰器的功能?

python - music21:在休止符上显示歌词

python - 从文本文件创建 numpy 数组时出错

python - 可选重定向 I/O 的上下文管理器

python - 为什么这个请求不起作用?

python - 在类结构中使用 functools.partial,未定义 "name ' self'

python - python中的展开函数