考虑以下功能:
def f():
print("WTF?!")
def g():
print("WTF?!")
他们都做了完全相同的事情,但f == g
的测试仍然给出了False
。我是否假设通过引用评估了仿函数等式,并且is
和==
之间没有区别?
是否是这种情况,哪一个更好用(即使只是风格上的)?
顺便说一下,我主要对Python 3(Python 3.6)感兴趣。
修改
我认为 This question 不重复。我理解引用相等和值相等之间的区别,我只是想了解==
如何在函子上使用值相等(如果有的话)。
答案 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)