python如何比较函数?
为什么这不会引起属性错误?函数对象没有任何比较方法。它是否以某种方式使用id()python如何比较函数?,python,sorting,Python,Sorting,为什么这不会引起属性错误?函数对象没有任何比较方法。它是否以某种方式使用id() fun1=lambda:x fun2=λ:x 打印fun1==fun1#真 打印fun1==fun2#错误 打印fun1>fun2#正确 打印fun11#正确 我知道它会比较地址,但如何比较呢? 拦截uuu lt_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
fun1=lambda:x
fun2=λ:x
打印fun1==fun1#真
打印fun1==fun2#错误
打印fun1>fun2#正确
打印fun11#正确
我知道它会比较地址,但如何比较呢?
拦截uuu lt_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 各国: 大多数其他内置类型的对象比较不相等,除非它们是相同的对象;一个对象比另一个对象小还是大的选择是任意的,但在程序的一次执行中是一致的 这可能是通过比较对象ID来完成的,但这不是语言指定的 我不确定使任何对象与任何其他对象具有可比性背后的原理是什么,但这是语言的一个内置功能–参考文献确实提到它使任何列表都可排序,这使得比较两个词典的定义更容易。不要定义它们自己的比较或丰富的比较。相反,它们从哪个实现继承 是的,它就像内置函数一样有效地使用地址
在Python 3中,函数不再是可排序的。FWIW它在Python 3中不再工作:fun1>fun2给出了“TypeError:unorderable types:function()>function()”,这可能是它从一开始就应该做的。除非与非函数比较,对吗?我认为实际上
fun1>1
的计算结果实际上是'function>1
,这是True
,但我懒得检查源代码。:-)
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