91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解Python函數式編程—高階函數

發布時間:2020-10-18 00:00:30 來源:腳本之家 閱讀:167 作者:宮城詩 欄目:開發技術

函數式編程就是一種抽象程度很高的編程范式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由于函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。

函數式編程的一個特點就是,允許把函數本身作為參數傳入另一個函數,還允許返回一個函數!

Python對函數式編程提供部分支持。由于Python允許使用變量,因此,Python不是純函數式編程語言。

高階函數

變量可以指向函數


詳解Python函數式編程—高階函數

函數名其實就是變量

函數名是什么?函數名其實就是指向函數的變量,對于abs這個函數,完全可以把函數名看做成為一個變量,

傳入函數

既然變量可以指向函數,函數的參數可以接受變量,那么一個函數就可以當做另一個函數的變量,這種函數就被稱為高階函數

詳解Python函數式編程—高階函數

def add(x,y,f):
	return f(x)+f(y)

下面介紹一個內置的高階函數

map接受兩個參數,一個是Iterable一個是函數。map將傳入的函數依次作用于到序列的每一個元素上,有點想列表生成式,并把結果作為寫的Iterator返回

詳解Python函數式編程—高階函數

map得到的結果是一個Iterator,所以要用list()函數讓整個序列變成一個list
list不是Iterator因為是[] , generator 是Iterator()
可以使用iter來將Iterable變成Iterator

詳解Python函數式編程—高階函數

本實例,實驗了str

reduce用法

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

比如對一個序列求和

詳解Python函數式編程—高階函數

詳解Python函數式編程—高階函數

詳解Python函數式編程—高階函數

fliter

filter用于過濾序列,和map類似,filter也接受一個函數和一個序列,和map不同的是,filter把傳入的函數依次作用于每個元素,然后根據返回值是True還是False決定保留還是丟棄該元素

def is_odd(n):
  return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 結果: [1, 5, 9, 15]

filter與reduce和map一樣,反悔的都是Iterator惰性序列,需要用list轉換

關于slice中的切片
詳解Python函數式編程—高階函數

str[::2]相當于正數開始2個一取,str[::-2]從倒數第一個元素開始,2個一取

Sorted

排序算法

排序也是在程序中經常用到的算法,無論使用冒泡排序還是快速排序,排序的核心是比較兩個元素的大小。
數字我們可以直接比較,但如果是字符串或者是兩個dict

sorted也是一個高階函數,可以用key函數來實現自定義的排序

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

默認情況下,對字符串排序,是按照ASCII的大小比較的,由于'Z' < ‘a',結果,大寫字母Z會排在小寫字母a的前面。

這樣,我們給sorted傳入key函數,即可實現忽略大小寫的排序:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']

要進行反向排序,不必改動key函數,可以傳入第三個參數reverse=True:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']

map reduce filter sorted

以上所述是小編給大家介紹的Python函數式編程—高階函數詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福贡县| 苍梧县| 措美县| 遂昌县| 义马市| 佳木斯市| 龙陵县| 田阳县| 安阳县| 通辽市| 安国市| 石泉县| 衡阳市| 比如县| 五原县| 龙江县| 浙江省| 拉萨市| 峨眉山市| 焉耆| 济阳县| 当阳市| 平湖市| 涿州市| 赤峰市| 玛纳斯县| 北宁市| 英吉沙县| 广东省| 新巴尔虎左旗| 洪湖市| 大宁县| 托里县| 平山县| 巩留县| 鹤庆县| 乡宁县| 京山县| 东平县| 广南县| 邯郸市|