【问题标题】:How does python compare functions?python如何比较函数?
【发布时间】:2011-10-29 23:30:22
【问题描述】:

这怎么不升属性错误?函数对象没有任何比较方法。它是否以某种方式使用 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__ 等是否有一些低级黑客入侵?

【问题讨论】:

    标签: python sorting


    【解决方案1】:

    Function objects 不定义自己的比较或丰富的比较。相反,它们继承自实现 rich comparisons based on the object's address in memorytype objects

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

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

    【讨论】:

    • 除非和非函数比较,对吧?我认为实际上fun1 &gt; 1 实际上计算为'function' &gt; 1,即True,但我懒得检查源代码。 :-)
    【解决方案2】:

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

    Python language reference 声明:

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

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

    我不确定使任何对象与任何其他对象具有可比性的基本原理是什么,但这是该语言的一个内置特性——参考确实提到它可以使任何列表可排序,这使得比较两个对象的定义成为可能字典更容易。

    【讨论】:

    • FWIW 它不再适用于 Python 3:fun1 > fun2 给出“TypeError: unorderable types: function() > function()”,这可能是它从一开始就应该做的。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2010-10-06
    相关资源
    最近更新 更多