python【進階】5.一等函數(注銷)

在 Python 中,函數是一等對象。編程語言理論家把“一等對象”定義為滿足下述條件的程
序實體:

  • 在運行時創建
  • 能賦值給變量或數據結構中的元素
  • 能作為參數傳給函數
  • 能作為函數的返回結果

在 Python 中,所有函數都是一等對象。

5.1 把函數視作對象

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

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

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

有了一等函數,就可以使用函數式風格編程。函數式編程的特點之一是使用高階函數。

5.2 高階函數

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

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

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

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

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

map、filter和reduce的現代替代品

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

示例 5-5:計算階乘列表:map 和 filter 與列表推導比較

>>> 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]
  • 使用列表推導做相同的工作,換掉 map 和 filter,并避免了使用 lambda 表達式。

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

示例 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 不再是內置函數了。
? 導入 add,以免創建一個專求兩數之和的函數。
? 計算 0~99 之和。
? 使用 sum 做相同的求和;無需導入或創建求和函數。

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

all 和 any 也是內置的歸約函數。

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

5.3匿名函數

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273817.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273817.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273817.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

進程狀態轉換(了解)

進程三個基本狀態&#xff1a;就緒、阻塞、運行 這個比較簡單&#xff0c;進程創建后進入就緒狀態、然后若CPU空閑或能打斷CPU正在執行的進程&#xff08;優先級低的&#xff09;&#xff0c;那么就緒狀態轉換成運行態&#xff0c;運行時&#xff0c;進程需要用到其他資源&…

rebuild online意外終止導致ora-8104錯誤的實驗

rebuild online意外終止導致ora-8104錯誤的實驗 SQL> !oerr ora 810408104, 00000, "this index object %s is being online built or rebuilt"// *Cause: the index is being created or rebuild or waited for recovering // from the online (re)build // *Act…

關于range方法,如果你覺得python很簡單就錯了

前言&#xff1a;在系統學習迭代器之前&#xff0c;我一直以為 range() 方法也是用于生成迭代器的&#xff0c;現在卻突然發現&#xff0c;它生成的只是可迭代對象&#xff0c;而并不是迭代器&#xff01; 1、range() 是什么&#xff1f; 對于 range() 函數&#xff0c;有幾個注…

centos下crontab的使用

1.作用使用crontab命令可以修改crontab配置文件&#xff0c;然后該配置由cron公用程序在適當的時間執行&#xff0c;該命令使用權限是所有用戶。2.格式crontab [-u user] {-l | -r | -e}3.crontab命令選項: -u指定一個用戶, -l列出某個用戶的任務計劃, -r刪除某個用戶的任務, -…

關于python3中的包operator(支持函數式編程的包)

文章目錄1.functools2.operator.itemgetter3.operator.attrgetter雖然 Guido 明確表明,Python 的目標不是變成函數式編程語言,但是得益于 operator 和 functools 等包的支持,函數式編程風格也可以信手拈來。接下來的兩節分別介紹這兩 個包。 1.functools 示例1 使用 reduce 函…

collections 中的namedtuple

文章目錄namedtuple 基本用法namedtuple特性_make(iterable)_asdict()_replace(**kwargs)_fields_fields_defaults參考&#xff1a;namedtuple 基本用法 Tuple還有一個兄弟&#xff0c;叫namedtuple。雖然都是tuple&#xff0c;但是功能更為強大。對于namedtuple&#xff0c;你…

abap 中modify 的使用

1、modify table itab from wa Transporting f1 f2 ... 表示表itab中符合工作區wa 中關鍵字的一條數據的 f1 f2字段會被wa中對應的字段值更新。 modify用于更新和新增數據&#xff0c;當表中沒有數據時就新增&#xff0c;有就修改。 2、在使用binary search 時一定要先排序&am…

python[進階] 6.使用一等函數實現設計模式

文章目錄6.1.1 經典的“策略”模式6.1.2 使用函數實現“策略”模式6.1.3 選擇最佳策略&#xff1a;簡單的6.1.4 找出模塊中的全部6.2 “命令”模式6.1.1 經典的“策略”模式 為抽象基類&#xff08;Abstract Base Class&#xff0c;ABC&#xff09;&#xff0c;這么做是為了使…

2014阿里巴巴校園招聘筆試題 - 中南站

轉載于:https://www.cnblogs.com/gotodsp/articles/3530329.html

python中一些特殊方法的作用

我們先暫且稱呼為特殊方法。 單下劃線開頭&#xff08;_foo&#xff09;雙下劃線開頭的&#xff08;__foo&#xff09;雙下劃線開頭和結尾的&#xff08; __foo__&#xff09;代表不能直接訪問的類屬性&#xff0c;需通過類提供的接口進行訪問&#xff0c;不能用“from xxx im…

Spring的IOC原理[通俗解釋一下]

1. IoC理論的背景 我們都知道&#xff0c;在采用面向對象方法設計的軟件系統中&#xff0c;它的底層實現都是由N個對象組成的&#xff0c;所有的對象通過彼此的合作&#xff0c;最終實現系統的業務邏輯。 圖1&#xff1a;軟件系統中耦合的對象 如果我們打開機械式手表的后蓋&am…

python爬蟲面試遇到的問題

文章目錄&#xff11;python基礎1.1 列表生成式和生成器的區別 &#xff1f;1.2 如何不用任何循環快速篩掉列表中的奇數元素 &#xff1f;1.3 map和reduce的用法1.4 裝飾器的作用1.5 Python中__new__與__init方法的區別1.6 python中的設計模式1.7 lambda函數&#xff0c;以及它…

ubuntu18 常用命令

文章目錄卸載和安裝卸載和安裝 1.打開一個終端&#xff0c;輸入dpkg --list ,按下Enter鍵&#xff0c;終端輸出以下內容&#xff0c;顯示的是你電腦上安裝的所有軟件。 2.安裝 dpkg –i name.deb 安裝一個 deb 包&#xff1b;在終端上輸入命令sudo apt-get --purge remove 包…

以嵌入式系統設計師考試成績,開始嵌入式博客之旅

http://www.rkb.gov.cn/jsj/cms/s_contents/download/s_dt201003110106.html 轉載于:https://www.cnblogs.com/yueqian-scut/p/3952268.html

SSH框架配置及Maven使用

1.SSH框架配置 1.1. SSH框架介紹 1.2. SSH框架配置 所需資源下載&#xff1a; l jdk; 從Oracle官方網站&#xff1a;http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html下載jdk&#xff0c;win7是默認安裝在C:\Program Files (x86)\Java\jdk1.6.0_25路徑下…

cookie,session的區別和聯系(補充token)

文章目錄1 http為什么是無狀態的2 cookie 和session 的區別詳解3 token參考&#xff1a;備注: 博客文章僅限于學習&#xff0c;禁止商用1 http為什么是無狀態的 2 cookie 和session 的區別詳解 這些都是基礎知識&#xff0c;不過有必要做深入了解。先簡單介紹一下。 二者的定…

庫函數和系統調用的區別

前言 這是一對非常容易混淆的概念。對于用戶( 應用程序開發者 )來說&#xff0c;并不一定要嚴格區分其意義。因為在用戶看來&#xff0c;它們都是以C函數的形式出現的。但了解二者的區別對我們掌握整個計算機系統有很大幫助。 區別 1. 一部分庫函數實現需要使用系統調用( 如 pr…

Flask 從入門到熟悉(不敢稱為精通)

文章目錄2.1 Flask介紹及其安裝2.2 Virtualenv3.1 一個最小的應用3.2 外部課件服務器3.3 調試模式4.1 路由介紹4.2 變量規則4.3 構建URL4.4 HTTP 方法4 總結5.1 靜態文件5.2 渲染模板5.3 練習66.1 接收請求數據6.2 請求對象6.3 文件上傳6.4 Cookies6 總結77.1 重定向和錯誤7.2 …

Ext JS 5 beta版發布

原文&#xff1a;Announcing Public Beta of Ext JS 5我們非常高興的宣布&#xff0c;Sencha Ext JS 5 beta版本開始進行公測了。這個beta版本可以讓你、我們Sencha社區來對我們的Ext JS 5的工作進度進行評測。對于所以Ext JS開發人員&#xff0c;這事一個很好的機會來協助完成…

算法【二分查找】(數組)

1 .山脈數組的巔峰索引 信息 我們把符合下列屬性的數組 A 稱作山脈&#xff1a; A.length > 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < … A[i-1] < A[i] > A[i1] > … > A[A.length - 1] 給定一個確定為山脈的數組&#xff0c;返回任何滿…