测试函数对象(仿函数)的相等性,如何评估?我使用`is`或`==`?

时间:2017-08-10 11:26:32

标签: python function equality functor

考虑以下功能:

def f():
    print("WTF?!")

def g():
    print("WTF?!")

他们都做了完全相同的事情,但f == g的测试仍然给出了False。我是否假设通过引用评估了仿函数等式,并且is==之间没有区别?

是否是这种情况,哪一个更好用(即使只是风格上的)?

顺便说一下,我主要对Python 3(Python 3.6)感兴趣。

修改

我认为

This question 重复。我理解引用相等和值相等之间的区别,我只是想了解==如何在函子上使用值相等(如果有的话)。

2 个答案:

答案 0 :(得分:3)

函数对象没有自定义__eq__方法(在将值与==进行比较时调用此方法),因此它们会回退到超类__eq__方法。在这种情况下,它是object.__eq__,实际上只是比较same object

所以:

>>> f == g
False

与(在这种情况下)相同:

>>> f is g
False

以防万一你知道函数没有自定义__eq__方法:

>>> type(f).__eq__ is object.__eq__
True

答案 1 :(得分:1)

不,你不能因为这个:

https://en.wikipedia.org/wiki/Rice%27s_theorem