小編給大家分享一下Python高階函數如何使用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在網站建設、成都網站制作中從網站色彩、結構布局、欄目設置、關鍵詞群組等細微處著手,突出企業(yè)的產品/服務/品牌,幫助企業(yè)鎖定精準用戶,提高在線咨詢和轉化,使成都網站營銷成為有效果、有回報的無錫營銷推廣。創(chuàng)新互聯公司專業(yè)成都網站建設十余年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯客戶聯系。
舉一個最簡單的高階函數
def foo(x, y, f): # f 是一個函數 """ 把 x, y 分別作為參數傳遞給 f, 最后返回他們的和 :param x: :param y: :param f: :return: """ return f(x) + f(y) def foo1(x): """ 返回參數的 x 的 3次方 :param x: :return: """ return x ** 3 r = foo(4, 2, foo1) print(r) # 72
說明:
1、這里的 foo 就是高階函數, 因為他接收了一個函數作為參數.
2、foo1作為參數傳遞給了foo, 而且foo中的局部變量f接收了foo傳遞過來的數據, 那么最終是foo和f同時指向了同一個對象。

總結
編寫高階函數,就是讓函數的參數能夠接收其他的函數。
把函數作為參數傳入,這樣的函數稱為高階函數,函數式編程就是指這種高度抽象的編程范式。
高階函數另一種形式:把函數作為返回值
高階函數除了可以接受函數作為參數外,還可以把函數作為結果值返回。
def foo(): x = 10 def temp(): nonlocal x x += 10 #x=x+10 return x return temp f = foo() print(f()) print(f())
輸出結果:

說明:
調用foo()得到的一個函數, 然后把函數賦值給變量f, 這個時候f和 foo內部的temp其實指向了同一個函數對象。
返回的函數每調用一次都會把foo 的局部變量x增加 10 .所以兩次調用分別得到 20 和 30。
返回訪問了外部函數的局部變量或者全局變量的函數,這種函數就是閉包。
內置高階函數
高階函數在函數式編程語言中使用非常的廣泛。
本節(jié)簡單介紹幾個常用的高階函數。
列表的排序, map/reduce, filter等。
map()和filter()
函數編程語言通常都會提供map, filter, reduce三個高階函數.
在python3中, map和filter仍然是內置函數, 但是由于引入了列表推導和生成器表達式, 他們變得沒有那么重要了。
列表推導和生成器表達式具有了map和filter兩個函數的功能, 而且更易于閱讀。
代碼展示:
a = map(lambda x: x ** 2, [10, 20, 30, 40]) print(list(a)) print(type(a))
輸出結果:

說明:
1、map函數是利用已有的函數和可迭代對象生成一個新的可迭代類型:map類型。
2、map的參數1是一個函數, 參數2是一個可迭代類型的數據. map會獲取迭代類型的每個數據, 傳遞給參數1的函數, 然后函數的返回值組成新的迭代類型的每個元素。
3、也可以有多個迭代器, 則參數1的函數的參數個數也會增加。
4、新生成的迭代器類型的元素的個數, 會和最短的那個迭代器的元素的個數保持一致。
a = map(lambda x, y: x + y, [10, 20, 30, 40], [100, 200]) print(list(a))
輸出結果:

使用列表推倒實現上面的功能
使用列表比map優(yōu)雅了很多, 而且也避免了參數1的函數
list1 = [10, 20, 30, 40] list3 = [x ** 2 for x in list1] print(list3)
輸出結果:

list1 = [10, 20, 30, 40] list2 = [100, 200] # 注意:列表推倒中這里是使用的笛卡爾積 list3 = [x + y for x in list1 for y in list2] print(list3)
輸出結果:

以上是Python高階函數如何使用的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道!
分享文章:Python高階函數如何使用
網頁地址:http://chinadenli.net/article14/gsjide.html
成都網站建設公司_創(chuàng)新互聯,為您提供靜態(tài)網站、微信小程序、網站排名、網站建設、關鍵詞優(yōu)化、網站收錄
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯