考虑这些函数:
def f():
print("WTF?!")
def g():
print("WTF?!")
它们都做同样的事情,但是 f == g
的测试仍然给出 False
。我是否由此假设仿函数相等性是通过引用求值的,并且 is
和 ==
之间没有区别?
无论情况是否如此,哪个更好用(即使只是风格上)?
顺便说一句,我主要对 Python 3 (Python 3.6) 感兴趣。
编辑
This question我认为不是重复。我理解引用相等和值相等之间的区别,我只是想了解 ==
如何在仿函数上使用值相等(如果有的话)。
最佳答案
函数对象没有自定义__eq__
方法(当将值与 ==
进行比较时调用此方法),以便它们返回到父类(super class) __eq__
方法。在这种情况下,它是 object.__eq__
实际上,它只是比较它们是否是 same object。 .
所以:
>>> f == g
False
与(在本例中)相同:
>>> f is g
False
以防万一你感兴趣,我怎么知道函数没有自定义 __eq__
方法:
>>> type(f).__eq__ is object.__eq__
True
关于python - 测试函数对象(functor)是否相等,如何求值?我使用 `is` 还是 `==` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45612425/