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
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
你不是直接調用該函數
你傳入到排序功能的「指示器」或將被用來作爲比較一個「參考」的功能
如果您需要更多的調試信息添加打印的內容所比較的線路如下
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列表對象
你是不是調用L.sort(比較)進行比較。您只是傳遞一個對將在內部通過排序調用的函數的引用。
你不需要任何其他參數。請記住,爲了給你打電話使用()的函數,因此,如果您實際調用它,你會寫L.sort(比較())
那麼sort函數如何定義a,b參數呢? –
它沒有。它只是期望一個它可以調用的函數。 https://docs.python.org/3/library/stdtypes.html#list.sort – rgargente
你爲什麼認爲'compare()'沒有被兩個參數調用?您將'compare()'作爲'cmp'參數傳遞給'list.sort()',並使用兩個參數調用回調函數。 – dhke
他顯然不明白他發佈的代碼片段的含義,這就是爲什麼他要求 – BlueTrin