簡體   English   中英

python如何比較函數?

[英]How does python compare functions?

為什么不上升屬性錯誤? 函數對象沒有任何比較方法。 它以某種方式使用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__等是否是一些低級別的黑客攻擊?

函數對象不定義自己的比較或豐富的比較。 相反,它們繼承自類型對象 ,這些對象 基於對象在內存中的地址實現豐富的比較

所以是的,它有效地使用地址,就像內置的id()函數一樣。

在Python 3中,函數不再可訂購。

__eq____lt__等。 不要在Python中實現比較,它們只是讓你覆蓋它。

Python語言參考說明:

內置類型的大多數其他對象比較不相等,除非它們是同一個對象; 一個對象被認為是小於還是大於另一個對象的選擇是在程序的一次執行中任意但一致地做出的。

這可能是通過比較對象ID來完成的,但語言並未指定。

我不確定使任何對象與任何其他對象相比背后的基本原理,但它是該語言的內置特性 - 引用確實提到它使任何列表可排序,這使得比較兩個字典的定義更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM