为什么不上升属性错误?函数对象没有任何比较方法。是否以某种方式使用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__等是否是一些低级别的黑客攻击?
答案 0 :(得分:23)
Function objects没有定义自己的比较或丰富的比较。相反,它们继承自实现type objects的rich comparisons based on the object's address in memory。
所以是的,它有效地使用地址,就像内置的id()函数一样。
在Python 3中,函数不再可订购。
答案 1 :(得分:10)
__eq__
,__lt__
等。不要在Python中实现实现比较,它们只是让你覆盖它。
内置类型的大多数其他对象比较不相等,除非它们是同一个对象;一个对象被认为是小于还是大于另一个对象的选择是在程序的一次执行中任意但一致的。
这可能是通过比较对象ID来完成的,但这并没有由语言指定。
我不确定使任何对象与任何其他对象相比背后的基本原理,但它是该语言的内置功能 - 引用确实提到它使任何列表可排序,这使得比较两个的定义字典更容易。