python如何比较函数?

ppr*_*mek 26 python sorting

为什么不上升属性错误?函数对象没有任何比较方法.它以某种方式使用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
Run Code Online (Sandbox Code Playgroud)

我知道它比较了地址,但是怎么样?拦截__lt __,__ eq__等是否是一些低级别的黑客攻击?

Ray*_*ger 23

函数对象不定义自己的比较或丰富的比较.相反,它们继承自类型对象,这些对象基于对象在内存中的地址实现丰富的比较.

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

在Python 3中,函数不再可订购.


mil*_*ose 10

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

Python语言参考状态:

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

这可能是通过比较对象ID来完成的,但语言并未指定.

我不确定使任何对象与任何其他对象相比背后的基本原理,但它是该语言的内置特性 - 引用确实提到它使任何列表可排序,这使得比较两个字典的定义更容易.

  • FWIW它不再适用于Python 3:fun1> fun2给出了"TypeError:unorderable types:function()> function()",这可能是它从一开始应该做的. (10认同)