python如何比较函数? [重复]

问题描述 投票:0回答:2

这怎么不出现属性错误呢?函数对象没有任何比较方法。它以某种方式使用 id() 吗?

fun1 = lambda:x
fun2 = lambda:x
print fun1 == fun1 # True
print fun1 == fun2 # False
print fun1 > fun2 # True
print fun1 < fun2 # False
print fun1 > 1 # True

我知道它会比较地址,但是如何比较呢? 是否有一些低级黑客拦截 __lt__、__eq__ 等?

sorting python-2.x
2个回答
24
投票

函数对象不定义自己的比较或丰富的比较。相反,它们继承自类型对象,后者根据内存中对象的地址实现丰富的比较

所以是的,它有效地使用地址,就像内置的 id() 函数一样。

在 Python 3 中,函数不再可排序。


9
投票

__eq__
__lt__
等。不要在 Python 中实现比较,它们只是让你覆盖它。

Python 语言参考 指出:

大多数其他内置类型的对象比较不相等,除非它们是同一个对象;一个对象被认为比另一个对象更小还是更大的选择是任意的,但在程序的一次执行中是一致的。

这可能是通过比较对象 ID 来完成的,但这不是由语言指定的。

我不确定使任何对象与任何其他对象进行比较背后的基本原理是什么,但它是该语言的内置功能 - 参考文献确实提到它使任何列表都可排序,这使得比较两个字典的定义变得更容易.

© www.soinside.com 2019 - 2024. All rights reserved.