Python 高階函式(2)

2021-08-10 19:17:19 字數 1196 閱讀 6109

sorted()函式也是乙個高階函式,它還可以接收乙個key函式來實現自定義的排序。key指定的函式將作用於list的每乙個元素上,並根據key函式返回的結果進行排序。

假設我們用一組tuple表示學生名字和成績:

l = [(『bob』, 75), (『adam』, 92), (『bart』, 66), (『lisa』, 88)]

請用sorted()對上述列表分別按名字排序。

**如下:

#對名字進行排序

l = [('bob', 75), ('adam', 92), ('bart', 66), ('lisa', 88)]

defby_name

(t):

return t[0].lower()

l2 = sorted(l, key = by_name)

print(l2)

#對分數進行排序

l = [('bob', 75), ('adam', 92), ('bart', 66), ('lisa', 88)]

defby_score

(t):

return t[1].lower()

l2 = sorted(l, key = by_score)

print(l2)

【分析】

l列表中的每個元素都是乙個元組,首先按名字排序,key作用與排序中列表裡的每乙個元素,所以傳入by_name裡的引數t是乙個元組,需要對元組的第乙個元素進行排序,所以是t[0]。

在函式f()中有定義了g(),並且部內函式g()可以引用外部分數f()的引數和區域性變數,當f()返回函式g()時,相關引數和變數都儲存在返回的函式中,這種稱為「閉包(closure)。

注意:返回函式不要引用任何迴圈變數,或者後續會發生變化的變數。如果一定要引用迴圈變數怎麼辦?方法是再建立乙個函式,用該函式的引數繫結迴圈變數當前的值,無論該迴圈變數後續如何更改,已繫結到函式引數的值不變。

匿名函式lambda x: x * x實際上就是:

def

f(x):

return x * x

關鍵字lambda表示匿名函式,冒號前面的x表示函式引數。

匿名函式有個限制,就是只能有乙個表示式,不用寫return,返回值就是該表示式的結果。

python 函式高階 python 函式高階

形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...

python高階程式設計 2 魔法函式

在觸發某些條件的情況下回自動呼叫的函式,以雙下劃線開頭和結尾,例如 iter getitem class company object def init self,employee list self.employee list employee list def getitem self,item...

Python高階 函式高階

閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...