测试函数对象(functor)是否相等,如何求值?我使用 `is` 还是 `==`?

Testing function object (functor) equality, how is it evaluated? Do I use `is` or `==`?

考虑这些功能:

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

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

他们都做同样的事情,但是 f == g 的测试仍然给出 False。我是否由此假设函子相等性是通过引用求值的,并且 is== 之间没有区别?

无论情况是否如此,哪个更好用(即使只是风格上)?

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

编辑

我认为

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

不,你不能,因为这个:

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

函数对象没有自定义__eq__ method (this method is called when comparing values with ==) so they fall back to the superclasses __eq__ method. In this case it's object.__eq__ which, indeed, just compares if they are the same object

所以:

>>> f == g
False

与(在本例中)相同:

>>> f is g
False

以防万一你感兴趣我怎么知道函数没有自定义 __eq__ 方法:

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