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

标签 python function equality functor

考虑这些函数:

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/

相关文章:

python - 如何从 pyqt 中的 qtableview 中删除行?

python - pyqtgraph:在 GLSurfacePlotItem 对象上设置 smooth=False 时出现问题

function - react : Cant call a function inside child component

Javascript原型(prototype)检查区分 "function declaration"和 "function expression",为什么?

c++ - 将 float 与特定 NAN 值进行比较的最正确方法是什么?

python - Python 的 Vim 语法高亮 'else:'

python - 通过执行 pscp 的 Windows 任务计划程序运行 python 脚本时出现问题

python - 使用函数对象作为字典键

r - 如何测试三个变量是否相等 [R]

"within x of"的 JavaScript 运算符