Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将包装函数与functools.partial进行比较?_Python_Functools - Fatal编程技术网

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

Python 如何将包装函数与functools.partial进行比较?,python,functools,Python,Functools,如果我将我的功能定义如下: def myfunc(arg1, arg2): pass 然后myfunc==myfunc将返回True 但是functools.partial(myfunc,arg2=1)=functools.partial(myfunc,arg2=1)将返回False 出于单元测试的目的,是否有一种简单的方法来测试部分函数是否是我期望的函数?测试func、args和关键字属性是否相同: p1.func == p2.func and p1.args == p2.args

如果我将我的功能定义如下:

def myfunc(arg1, arg2):
    pass
然后
myfunc==myfunc
将返回
True

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


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

测试
func
args
关键字
属性是否相同:

p1.func == p2.func and p1.args == p2.args and p1.keywords == p2.keywords
其中
p1
p2
都是
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

有一种方法可以将相等性测试添加到基本上可以这样做的
部分
对象中,但被拒绝了,理由是没有
\uuuuuueq\uuuuu
方法会影响函数的行为,函数的行为也只有在其
id()
匹配时才相等。

要比较的辅助函数

def partial_functions_equal(func1, func2):
    if not (isinstance(func1, partial) and isinstance(func2, partial)):
        return False
    are_equal = all([getattr(func1, attr) == getattr(func2, attr) for attr in ['func', 'args', 'keywords']])
    return are_equal

在标准的
\uuuu eq\uuu
中,
functools.partial
对象没有实现这一点,有什么好的理由吗?