日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python学习-高阶函数(函数传参、返回函数(闭包)、匿名函数lambda)

發布時間:2023/12/19 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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輸出。

rst = map(lambda x: x ** x, [y for y in range(5)]) print(rst, type(rst)) print(list(rst)) squares = list(map(lambda x: x**2, range(10))) print(squares)


釋疑
有些文章里面說lambda能夠提高運行效率,一篇博文里面對此進行了驗證

我沒有進行試驗,不過從結果看出來,其實效率沒什么差別。
還有其他用法:
比如把lambda賦值給一個變量,然后像函數一樣調用。

rst2 = lambda x, y, z: x * y * zprint() print(rst2(2, 3, 4))tup = [(1, "a"), (8, "r"), (3, "e"), (4, "b")]print() print(sorted(tup, key=lambda x: x[0])) print() print(sorted(tup, key=lambda x: x[1])) print()

對元組進行排序,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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。