python学习-高阶函数(函数传参、返回函数(闭包)、匿名函数lambda)
文章目錄
- 高階函數
- 函數傳參
- 返回函數(閉包)
- 匿名函數lambda
高階函數
定義:
至少滿足下列一個條件:
- 接受一個或多個函數作為輸入
- 輸出一個函數
python里的高階函數有 filter、map、reduce、sorted、匿名函數lambda等
函數傳參
顧名思義就是把一個函數作為參數傳到另一個函數中,也不復雜,直接上代碼:
def test1(x, func):return func(x)print(test1([1, 2, 3, 4, 5], sum))這是一個很簡單的示例,sum函數作為參數傳入test1函數。
返回函數(閉包)
在函數中定義了另一個函數,并且把定義的函數作為返回值返回出去,在外部調用。
def mySum(*args):def sum():sum1 = 0for i in args:sum1 = sum1 + ireturn sum1return sumfunc1 = mySum(1, 2, 3, 4, 5) print(func1) print(func1())從代碼中能夠看出,如果直接調用func1,打印的是函數的地址。
所以需要像調用函數一樣去執行 :func1(),才能打印結果。
匿名函數lambda
python使用lambda來創建匿名函數
- lambda 只是一個表達式,函數體比 def 簡單很多。
- lambda的主體是一個表達式,而不是一個代碼塊。
- 只能在lambda表達式中封裝有限的邏輯進去。
- lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間里的參數。
- 雖然lambda函數看起來只能寫一行,卻不等同于C或C++的內聯函數,后者的目的是調用小函數時不占用棧內存從而增加運行效率。
lambda [arg1 [,arg2,…argn]]:expression
lambda 參數列表:return [表達式] 變量
由于lambda返回的是函數對象(構建的是一個函數對象),所以需要定義一個變量去接收
劃重點:
在Python3里,map返回的結果是迭代器(iterator),因此需要先轉換為列表list,再print輸出。
釋疑
有些文章里面說lambda能夠提高運行效率,一篇博文里面對此進行了驗證
我沒有進行試驗,不過從結果看出來,其實效率沒什么差別。
還有其他用法:
比如把lambda賦值給一個變量,然后像函數一樣調用。
對元組進行排序,lambda結合sorted函數
運行結果:
還有一些其他使用:
# 在tkinter中定義內聯的callback函數 import sys from tkinter import Button, mainloop# 這里可以彈出一個窗口,點擊按鈕,打印Hello,World! callBck = Button(text='Press', command=(lambda: sys.stdout.write('Hello,World!\n'))) callBck.pack() callBck.mainloop()另一段代碼:
str2 = ['123', '213', '2443425', '12324235', '123123', '234234', '434234'] strBegin = filter(lambda x: x.startswith('1'), str2) print(strBegin, type(strBegin)) print(list(strBegin))運行結果:
打印結果時,因為結果需要轉換類型才能打印出來,所以,使用的是:print(list(strBegin))
總結
以上是生活随笔為你收集整理的python学习-高阶函数(函数传参、返回函数(闭包)、匿名函数lambda)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习-序列化对象(pickl
- 下一篇: python学习-列表解析、字典解析