这怎么不出现属性错误呢?函数对象没有任何比较方法。它以某种方式使用 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__ 等?
__eq__
,__lt__
等。不要在 Python 中实现比较,它们只是让你覆盖它。
Python 语言参考 指出:
大多数其他内置类型的对象比较不相等,除非它们是同一个对象;一个对象被认为比另一个对象更小还是更大的选择是任意的,但在程序的一次执行中是一致的。
这可能是通过比较对象 ID 来完成的,但这不是由语言指定的。
我不确定使任何对象与任何其他对象进行比较背后的基本原理是什么,但它是该语言的内置功能 - 参考文献确实提到它使任何列表都可排序,这使得比较两个字典的定义变得更容易.