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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python【进阶】5.一等函数(注销)

發(fā)布時間:2023/12/10 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python【进阶】5.一等函数(注销) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在 Python 中,函數(shù)是一等對象。編程語言理論家把“一等對象”定義為滿足下述條件的程
序?qū)嶓w:

  • 在運(yùn)行時創(chuàng)建
  • 能賦值給變量或數(shù)據(jù)結(jié)構(gòu)中的元素
  • 能作為參數(shù)傳給函數(shù)
  • 能作為函數(shù)的返回結(jié)果

在 Python 中,所有函數(shù)都是一等對象。

5.1 把函數(shù)視作對象

>>> def d(n): ... '''return n!''' ... return 1 if n<2 else n*d(n-1) ... >>> d(42) 1405006117752879898543142606244511569936384000000000 >>> d.__doc__ 'return n!' >>> # __doc__ 屬性用于生成對象的幫助文本。

map 函數(shù)返回一個可迭代對象,里面的元素是把第一個參數(shù)(一個函數(shù))應(yīng)用到第二個參數(shù)(一個可迭代對象,這
里是 range(11))中各個元素上得到的結(jié)果。

>>> list(map(f,range(11))) [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]

有了一等函數(shù),就可以使用函數(shù)式風(fēng)格編程。函數(shù)式編程的特點之一是使用高階函數(shù)。

5.2 高階函數(shù)

接受函數(shù)為參數(shù),或者把函數(shù)作為結(jié)果返回的函數(shù)是高階函數(shù)(higher-orderfunction)。map 函數(shù)就是一例此外,內(nèi)置函數(shù) sorted 也是:可選的key 參數(shù)用于提供一個函數(shù),它會應(yīng)用到各個元素上進(jìn)行排序。

示例 5-3:根據(jù)單詞長度給一個列表排序

>>> fruits = ['strawberry', 'fig', 'apple', 'cherry', 'raspberry', 'banana'] >>> sorted(fruits, key=len) ['fig', 'apple', 'cherry', 'banana', 'raspberry', 'strawberry']

示例 5-4:根據(jù)反向拼寫給一個單詞列表排序

>>> def reverse(word): ... return word[::-1] >>> reverse('testing') 'gnitset' >>> sorted(fruits, key=reverse) ['banana', 'apple', 'fig', 'raspberry', 'strawberry', 'cherry'] >>>

map、filter和reduce的現(xiàn)代替代品

函數(shù)式語言通常會提供 map、filter 和 reduce 三個高階函數(shù)(有時使用不同的名
稱)。在 Python 3 中,map 和 filter 還是內(nèi)置函數(shù),但是由于引入了列表推導(dǎo)和生成器表達(dá)式,它們變得沒那么重要了。
列表推導(dǎo)或生成器表達(dá)式具有 map 和 filter 兩個函數(shù)的功能,而且更易于閱讀,如示例 5-5 所示。

示例 5-5:計算階乘列表:map 和 filter 與列表推導(dǎo)比較

>>> list(map(f,range(11))) [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800] >>> list(map(f,range(6))) [1, 1, 2, 6, 24, 120] >>> [f(n) for n in range(6)] [1, 1, 2, 6, 24, 120] >>> list(map(f,filter(lambda n: n%2,range(6)))) [1, 6, 120]
  • 使用列表推導(dǎo)做相同的工作,換掉 map 和 filter,并避免了使用 lambda 表達(dá)式。

在 Python 3 中,map 和 filter 返回生成器(一種迭代器),因此現(xiàn)在它們的直接替代品
是生成器表達(dá)式(在 Python 2 中,這兩個函數(shù)返回列表,因此最接近的替代品是列表推導(dǎo).

示例 5-6
使用 reduce 和 sum 計算 0~99 之和

>>> from functools import reduce? >>> from operator import add ? >>> reduce(add, range(100)) ? 4950 >>> sum(range(100)) ? 4950 >>>

? 從 Python 3.0 起,reduce 不再是內(nèi)置函數(shù)了。
? 導(dǎo)入 add,以免創(chuàng)建一個專求兩數(shù)之和的函數(shù)。
? 計算 0~99 之和。
? 使用 sum 做相同的求和;無需導(dǎo)入或創(chuàng)建求和函數(shù)。

  • sum 和 reduce 的通用思想是把某個操作連續(xù)應(yīng)用到序列的元素上,累計之前的結(jié)果,把
    一系列值歸約成一個值。

all 和 any 也是內(nèi)置的歸約函數(shù)。

  • all(iterable)如果 iterable 的每個元素都是真值,返回 True;all([]) 返回 True。
  • any(iterable)只要 iterable 中有元素是真值,就返回 True;any([]) 返回 False。

5.3匿名函數(shù)

總結(jié)

以上是生活随笔為你收集整理的python【进阶】5.一等函数(注销)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。