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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第5章 一等函数

發布時間:2025/4/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第5章 一等函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#《流暢的Python》讀書筆記 # 第三部分 把函數視作對象 # 第5章 一等函數 #在Python中,函數是一等對象。編程語言理論家把“一等對象”定義為滿足下述條件的程序實體:#在運行時創建#能賦值給變量或數據結構中的元素#能作為參數傳給函數#能作為函數的返回結果# 5.1 把函數視作對象 # 示例 5-1 中的控制臺會話表明,Python 函數是對象。這里我們創建了一個函數,然后調用它,讀取它的 __doc__ 屬性,并且確定函數對象本身是 function 類的實例。#示例 5-1 創建并測試一個函數,然后讀取它的 __doc__ 屬性,再檢查它的類型 def factorial(n): '''return n!''' return 1 if n<2 else n*factorial(n-1) print(factorial(42)) #1405006117752879898543142606244511569936384000000000 print(factorial.__doc__) #return n! print(type(factorial)) #<class 'function'># 示例 5-2 通過別的名稱使用函數,再把函數作為參數傳遞 fact=factorial print(fact) #<function factorial at 0x01C15420> print(fact(5)) #120 print(map(factorial,range(11))) #<map object at 0x013D3710> print(list(map(fact,range(11)))) #[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]# 5.2 高階函數 # 接受函數為參數,或者把函數作為結果返回的函數是高階函數(higher-order function)。# 示例 5-3 根據單詞長度給一個列表排序 fruits=['strawberry','fig','apple','cherry','raspberry','banana'] print(sorted(fruits,key=len))# 示例 5-4 根據反向拼寫給一個單詞列表排序 def reverse(word): return word[::-1] print(reverse('testing')) #gnitset print(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與列表推導比較 print(list(map(fact,range(6)))) #[1, 1, 2, 6, 24, 120] print([fact(n) for n in range(6)]) #[1, 1, 2, 6, 24, 120] print(list(map(factorial, filter(lambda n: n % 2, range(6))))) #[1, 6, 120] print([factorial(n) for n in range(6) if n % 2]) #[1, 6, 120]# 示例 5-6 使用reduce和sum計算0~99之和 from functools import reduce from operator import add print(reduce(add,range(100))) #4950 print(sum(range(100))) #4950 # 函數式語言通常會提供map、filter和reduce三個高階函數(有時使用不同的名稱)。 # 在Python3中,map和filter還是內置函數,但是由于引入了列表推導和生成器表達式,它們變得沒那么重要了。# 5.3 匿名函數 # lambda 關鍵字在 Python 表達式內創建匿名函數。# 示例 5-7 使用lambda表達式反轉拼寫,然后依此給單詞列表排序 fruits=['strawberry','fig','apple','cherry','raspberry','banana'] print(sorted(fruits,key=lambda word:word[::-1])) #['banana', 'apple', 'fig', 'raspberry', 'strawberry', 'cherry']# 5.4 可調用對象 # Python 中有各種各樣可調用的類型,因此判斷對象能否調用,最安全的方法是使用內置的callable()函數: print(abs,str,13) #<built-in function abs> <class 'str'> 13 print([callable(obj) for obj in (abs,str,13)]) #[True, True, False]# 5.5 用戶定義的可調用類型 # 不僅Python函數是真正的對象,任何 Python 對象都可以表現得像函數。為此,只需實現實例方法 __call__# 示例 5-8 bingocall.py:調用 BingoCage 實例,從打亂的列表中取出一個元素 import random class BingoCage: def __init__(self,items): self._items=list(items) random.shuffle(self._items) def pick(self): try: return self._items.pop() except IndexError: raise LookupError('pick from empty BingoCage') def __call__(self): return self.pick()#bingo.pick() 的快捷方式是 bingo()。 bingo=BingoCage(range(3)) print(bingo.pick()) print(bingo.pick()) print(callable(bingo))# 5.6 函數內省 # 除了 __doc__,函數對象還有很多屬性。使用 dir 函數可以探知factorial 具有下述屬性:# 示例 5-9 列出常規對象沒有而函數有的屬性 class C:pass obj=C() def func():pass print(sorted(set(dir(func))-set(dir(obj)))) # ['__annotations__', '__call__', '__closure__', '__code__', '__defaults__', # '__get__', '__globals__', '__kwdefaults__', '__name__', '__qualname__']# 5.7 從定位參數到僅限關鍵字參數 # Python 最好的特性之一是提供了極為靈活的參數處理機制,而且 Python3 進一步提供了僅限關鍵字參數(keyword-only argument)。 # 與之密切相關的是,調用函數時使用 * 和 **“展開”可迭代對象,映射到單個參數。# 示例 5-10 tag 函數用于生成 HTML 標簽;使用名為 cls 的關鍵字參數傳入“class”屬性,這是一種變通方法,因為“ class”是 Python的關鍵字# 示例 5-11 tag 函數(見示例 5-10)眾多調用方式中的幾種# 5.8 獲取關于參數的信息 # HTTP 微框架 Bobo 中有個使用函數內省的好例子。 # 示例 5-12 是對 Bobo教程中“Hello world”應用的改編,說明了內省怎么使用。# 示例 5-12 Bobo 知道 hello 需要 person 參數,并且從 HTTP 請求中獲取它# 示例 5-13 如果請求中缺少函數的參數,Bobo 返回 403 forbidden響應;curl -i 的作用是把首部轉儲到標準輸出# 示例 5-14 傳入所需的 person 參數才能得到 OK 響應# 示例 5-15 在指定長度附近截斷字符串的函數# 示例 5-16 提取關于函數參數的信息# 示例 5-17 提取函數的簽名# 示例 5-18 把tag 函數(見示例 5-10)的簽名綁定到一個參數字典上# 5.9 函數注解 # Python 3 提供了一種句法,用于為函數聲明中的參數和返回值附加元數據。 # 示例 5-19 是示例 5-15 添加注解后的版本,二者唯一的區別在第一行。# 示例 5-19 有注解的 clip 函數# 示例 5-20 從函數簽名中提取注解# 5.10 支持函數式編程的包 # 雖然 Guido 明確表明,Python 的目標不是變成函數式編程語言,但是得益于 operator 和 functools 等包的支持,函數式編程風格也可以信手拈來。 # 接下來的兩節分別介紹這兩個包。# 5.10.1 operator模塊 # 在函數式編程中,經常需要把算術運算符當作函數使用。例如,不使用遞歸計算階乘。 # 求和可以使用 sum 函數,但是求積則沒有這樣的函數。我們可以使用 reduce 函數(5.2.1 節是這么做的),但是需要一個函數計算序列中兩個元素之積。 # 示例 5-21 展示如何使用 lambda 表達式解決這個問題。# 示例 5-21 使用reduce函數和一個匿名函數計算階乘 from functools import reduce def fact(n): return reduce(lambda a,b:a*b,range(1,n+1))# 示例 5-22 使用reduc和operator.mul函數計算階乘 from functools import reduce from operator import mul def fact(n): return reduce(mul,range(n,n+1))# 示例 5-23 演示使用 itemgetter 排序一個元組列表# 示例 5-24 定義一個 namedtuple,名為 metro_data# 示例 5-25 methodcaller使用示例:第二個測試展示綁定額外參數的方式 from operator import methodcaller s='The time has come' upcase=methodcaller('upper') print(upcase(s)) #THE TIME HAS COME hiphenate=methodcaller('replace',' ','-') print(hiphenate(s)) #The-time-has-come# 5.10.2 使用functools.partial凍結參數 # functools 模塊提供了一系列高階函數,其中最為人熟知的或許是reduce,我們在 5.2.1 節已經介紹過。 # 余下的函數中,最有用的是partial 及其變體,partialmethod。# 示例5-26使用partial把一個兩參數函數改編成需要單參數的可調用對象 from operator import mul from functools import partial triple=partial(mul,3) print(triple(7)) #21 print(list(map(triple,range(1,10)))) #[3, 6, 9, 12, 15, 18, 21, 24, 27]# 示例 5-27 使用 partial 構建一個便利的 Unicode 規范化函數# 示例 5-28 把 partial 應用到示例 5-10 中定義的 tag 函數上# 5.11 本章小結# 5.12 延伸閱讀 # 接下來的兩章繼續探討使用函數對象編程。第 6 章說明一等函數如何簡化某些經典的面向對象設計模式,第 7 章說明函數裝飾器(一種特別的高階函數)和支持裝飾器的閉包機制。

?

轉載于:https://www.cnblogs.com/larken/p/9557315.html

總結

以上是生活随笔為你收集整理的第5章 一等函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲精品乱码久久久久99 | 操天天 | 免费毛片在线播放免费 | 天天摸天天射 | 欧美又粗又深又猛又爽啪啪九色 | 黄色一级视频网站 | 美女视频在线观看免费 | 白白色视频在线 | 麻豆影视国产在线观看 | 欧美3p视频 | 亚洲AV无码国产日韩久久 | 久久少妇av | 毛片视频网站在线观看 | 国产a级免费视频 | 最近免费中文字幕大全免费版视频 | 黑丝啪啪 | 99精品欧美一区二区蜜桃免费 | 久热超碰 | 老熟妇仑乱一区二区av | 日本不卡一区二区三区视频 | aaa一区二区| 黄色片免费播放 | 韩国性猛交╳xxx乱大交 | av资源免费看 | 性视频一区 | 高清人妖shemale japan | 天天干天天摸 | 成人网视频 | 婷婷激情小说 | 国产成人在线播放视频 | 国产超级av | 日韩在线一二三区 | www.色偷偷 | 黄色短视频在线播放 | 精品国偷自产国产一区 | www.人人草 | 你懂的在线观看网站 | 国产高清露脸 | 免费av网址在线 | 日韩视频一二三区 | 黄色片不卡 | 日韩欧美影院 | 在线免费观看日韩av | zjzjzjzjzj亚洲女人 | 日韩一级片免费在线观看 | 在线观看中文字幕一区 | 麻豆出品 | 国产精品视频久久久久 | 91香蕉视频污污 | 亚洲中文字幕无码爆乳av | 精品视频在线一区 | 日韩精品视频一区二区在线观看 | 成年人视频在线播放 | 日本在线三级 | 国产欧美精品区一区二区三区 | 精品动漫一区二区 | 日日爽夜夜 | 久久午夜国产精品 | 性一交一乱一伧老太 | 欧美一区二区三区成人片在线 | 久久亚洲热 | 黄色在线观看国产 | 日本福利视频一区 | 成人免费三级 | 中文字幕一区二区人妻电影 | 国产又粗又猛又爽视频 | 伊人色综合久久久 | 日本真人做爰免费视频120秒 | av手机观看| 国产一区二区欧美 | 夜夜躁很很躁日日躁麻豆 | 亚洲国产精品99久久 | 免费在线你懂的 | 少妇又紧又深又湿又爽视频 | 黄色大片在线看 | 成年人免费黄色片 | 夏目彩春娇喘呻吟高潮迭起 | 伊人狠狠| 沟厕沟厕近拍高清视频 | 911精品国产一区二区在线 | 在线不卡欧美 | 国产乱码精品一品二品 | 成人日韩视频 | 国产网址 | 中文写幕一区二区三区免费观成熟 | 手机av资源 | 日韩av手机在线播放 | 毛片在线免费视频 | 男女插插插网站 | 一区二区三区欧美视频 | 国产激情自拍视频 | 97精品国产97久久久久久粉红 | 四虎中文字幕 | 美国式禁忌1980 | 性色国产成人久久久精品 | 国产视频一区二区三区在线观看 | 韩国三级hd中文字幕的背景音乐 | 日韩社区 | 日本黄色大片网站 |