2016-06-13 29 views
0
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沒有給出恰好兩個參數? 當代碼運行它給人的輸出,當一個沒有定義參數的調用參數的python函數會發生什麼?

4 
5 
+3

你爲什麼認爲'compare()'沒有被兩個參數調用?您將'compare()'作爲'cmp'參數傳遞給'list.sort()',並使用兩個參數調用回調函數。 – dhke

+0

他顯然不明白他發佈的代碼片段的含義,這就是爲什麼他要求 – BlueTrin

回答

1

你不是直接調用該函數

你傳入到排序功能的「指示器」或將被用來作爲比較一個「參考」的功能

如果您需要更多的調試信息添加打印的內容所比較的線路如下

L=[5,10,4,2,8,7] 
def compare(a,b): 
    print 'comparing ',a,b 
    return cmp(b,a) 

L.sort(compare) 

,你也會注意到這個數字呼叫取決於對L- DIS-爲了

有幾種方法來解決的秩序問題的數組 一些對於合併排序,二進制排序還有人

這是link源代碼python列表對象

0

你是不是調用L.sort(比較)進行比較。您只是傳遞一個對將在內部通過排序調用的函數的引用。

你不需要任何其他參數。請記住,爲了給你打電話使用()的函數,因此,如果您實際調用它,你會寫L.sort(比較())

+0

那麼sort函數如何定義a,b參數呢? –

+0

它沒有。它只是期望一個它可以調用的函數。 https://docs.python.org/3/library/stdtypes.html#list.sort – rgargente

相關問題