[英]What happens when a python function that takes arguments called without defining parameters?
L=[5,10,4,2,8,7]
def compare(a,b):
return cmp(b,a)
L.sort(compare)
print (L[-2])
L.sort()
print (L[2])
當運行此代碼時,為什么由於未在sort函數內調用的compare函數沒有確切給出兩個參數而引發異常? 運行代碼時,其輸出為
4
5
您沒有直接調用該函數
您正在向排序函數傳遞將用作比較器的函數的“指針”或“引用”
如果您需要更多調試信息,請添加一行以打印正在比較的內容,如下所示
L=[5,10,4,2,8,7]
def compare(a,b):
print 'comparing ',a,b
return cmp(b,a)
L.sort(compare)
您還會注意到通話次數取決於L亂序
有幾種方法可以解決對數組排序的問題,其中一些是merge-sort,binary-sort,還有一些
這是到python列表對象的源代碼的鏈接
您沒有在L.sort(compare)中調用compare。 您只是傳遞對將通過排序在內部調用的函數的引用。
您不需要任何其他參數。 請記住,為了調用一個函數,您需要使用(),因此,如果您實際上在調用它,則應編寫L.sort(compare())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.