簡體   English   中英

當一個python函數接受沒有定義參數的參數時會發生什么?

[英]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.

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