- Python函數式編程(第2版)
- (美)史蒂文·洛特
- 2937字
- 2020-04-22 12:28:27
前言
函數式編程為創建代碼簡潔明了的軟件提供了許多技術。雖然Python不是純粹的函數式語言,但仍然可以使用Python進行函數式編程。
Python具備函數式編程的許多核心特征,使得我們可以借鑒其他函數式語言的設計模式和編程技術,編寫出簡潔優雅的代碼。尤其值得一提的是Python的生成器表達式,使用它可以避免在內存中創建大型數據結構,通過降低資源消耗來提高執行速度。
Python缺少創建純粹函數式程序所需的一些語言特征,例如無限遞歸、針對所有表達式的惰性求值(lazy evaluation)以及優化編譯器等。
函數式編程的許多核心要素都在Python中有所體現,例如函數是頭等對象。Python還提供了許多典型的高階函數,例如廣泛使用的內置map()、filter()和functools.reduce()等,以及不那么明顯的sorted()、min()和max()等。
本書通過Python語言詮釋函數式編程的核心思想,旨在利用函數式編程的優點,編寫出代碼簡潔明了的Python程序。
目標讀者
如果你希望借鑒函數式編程語言的技術和設計模式編寫出簡潔明了的Python程序,本書便是為你準備的。某些算法用函數式方法編寫更為簡潔,我們可以也應該運用函數式方法編寫出更易讀且更易維護的Python程序。
可以通過函數式編程在適宜的場景中開發出高性能的算法,但Python往往會生成大型中間數據結構,耗盡機器的內存和CPU。因此常用生成器表達式代替大型列表,前者在保證可讀性的前提下,內存消耗更少,運算速度更快。
本書內容
第1章:函數式編程概述,介紹Python中函數式編程對應的技術和語言特征,以及函數式設計為Python程序帶來的好處。
第2章:函數式編程的特點,分析函數式編程范式的6個核心特征,以及每個特征在Python中的實現方法,還會講到一些在Python中不易實現的函數式語言特征,例如為了支持編譯優化,許多語言的類型匹配規則非常復雜。
第3章:函數、迭代器和生成器,介紹如何在Python中使用不可變對象和生成器表達式,如何將函數式編程的核心思想應用于Python和Python內置的集合類型,以及如何將函數式編程理念運用于這些數據結構。
第4章:使用集合,介紹如何使用Python的內置函數操作數據集。其中重點介紹幾個比較簡單的函數,例如any()和all(),它們的共同點是能將集合轉換為單個值。
第5章:高階函數,介紹一些常用的高階函數,例如map()和filter(),以及如何創建新的高階函數。
第6章:遞歸與歸約,介紹如何使用遞歸設計算法,以及使用for循環提升性能,還會介紹其他一些應用廣泛的歸約函數,例如collections.Counter()。
第7章:元組處理技術,介紹使用不可變的元組和命名元組代替狀態可變對象的方法。相比而言,不可變對象沒有誤用屬性導致對象行為異常(不連續或無效)的問題,用起來更簡單可靠。
第8章:itertools模塊,介紹Python標準庫中處理集合和生成器的幾個函數,可用于簡化處理集合數據的程序。
第9章:高級itertools技術,介紹itertools模塊中不太常用的組合器函數,并演示錯誤使用這些函數導致的組合器膨脹問題。
第10章:functools模塊,介紹如何將functools模塊中的函數用于函數式編程。此模塊中適用于構建裝飾器的少數函數留待第11章討論。本章還會介紹一些支持其他函數式編程的函數。
第11章:裝飾器設計技術,介紹如何用裝飾器構建復合函數。雖然使用裝飾器能給程序開發帶來很大的靈活性,但也有概念限制:過于復雜的裝飾器非但無用,還會嚴重降低程序的可讀性。
第12章:multiprocessing和threading模塊,介紹函數式編程的一大優勢:便于分流任務負載。使用不可變對象能避免設計欠佳的同步寫入操作導致運行結果不可預料。
第13章:條件表達式和operator模塊,介紹避開Python嚴格求值順序的一些變通方法及其局限性,以及使用operator模塊給某些簡單的處理帶來的輕微提升。
第14章:PyMonad庫,介紹PyMonad庫的主要特點以及更豐富的函數式編程手段,還有單子(monad)。在一些函數式語言中,代碼優化會打亂某些操作的順序,而開發者可以使用單子強制程序按照期望的順序執行。由于Python按照嚴格的順序對表達式和聲明求值,因此在Python中,單子的理論研究價值高于實用價值。
第15章:Web服務的函數式設計方法。如果把Web服務看作從請求到響應的轉換,那么可以把開發Web服務看作開發能實現該轉換的一組函數。本章將介紹如何借助函數式編程方法構建響應式動態Web內容。
第16章:優化與改進,介紹提升程序性能的一些方法和技巧。在適合的場景中,這些方法(例如內存化)不但易于實現,并且能顯著提升程序性能。
如何使用本書
閱讀本書需要讀者對Python 3和應用開發有基本了解。本書不會涉及Python中細微、復雜的語言特性,也不需要讀者了解實現語言功能的內部機制。
讀者需要對函數式編程有基本了解。由于Python不屬于函數式語言,因此本書不會深入探討函數式編程的概念,而會著重介紹其中適用于Python并有實用價值的部分。
書中的部分示例使用探索性數據分析(EDA)引出問題,演示函數式編程的特點。對統計學和概率論有基本了解有助于理解問題。只有很少一部分示例涉及數據科學。
你的計算機上需要安裝并運行Python 3.6。關于Python的更多信息,請訪問 http://www.python.org。本書的示例代碼經常使用類型提示,所以請安裝最新版本的mypy。關于最新版本的mypy,請訪問https://pypi.python.org/pypi/mypy。
第9章的示例代碼使用了PIL和BeautifulSoup 4。為了保持版本兼容,使用了PIL庫的新分支版本Pillow代替原始PIL庫,詳情請訪問https://pypi.python.org/pypi/Pillow/2.7.0和https://pypi. python.org/pypi/beautifulsoup4/4.6.0。
第14章的示例代碼使用了PyMonad庫,詳情請訪問https://pypi.python.org/pypi/PyMonad/1.3。
可以通過如下命令安裝以上所有庫。
$ pip install pillow beautifulsoup4 PyMonad
下載源代碼
如果你是從http://www.packtpub.com網站購買的圖書,登錄自己的賬號后就可以下載所有已購圖書的示例代碼。如果你是從其他地方購買的圖書,請訪問 http://www.packtpub.com/support網站并注冊,我們會將代碼文件直接發送到你的電子郵箱。
你也可以通過以下步驟下載代碼文件。
(1)在我們的網址上登錄或注冊。
(2)選擇SUPPORT標簽。
(3)點擊Code Downloads & Errata。
(4)在Search框中輸入書名并按屏幕上的提示操作。
文件下載后,使用以下工具的最新版本來解壓縮或提取文件夾。
? WinRAR / 7-Zip(Windows)
? Zipeg / iZip/UnRarX(Mac)
? 7-Zip / PeaZip(Linux)
本書代碼也托管在GitHub上,訪問 https://github.com/PacktPublishing/Functional-Python-Programming-Second-Edition/即可獲取。Packt擁有豐富的圖書和視頻資源,相關代碼見GitHub倉庫:https://github.com/PacktPublishing/。歡迎查閱!
排版約定
本書如下約定文本樣式。
正文中的代碼采用以下樣式:“Python有其他聲明,如global或nonlocal,用于在特定命名空間中修改變量的規則。”
代碼塊的樣式如下所示。
s = 0 for n in range(1, 10): if n % 3 == 0 or n % 5 == 0: s +=n print(s)
如果代碼塊的特定部分需要注意,相應的行或項會加粗。
s = 0 for n in range(1, 10): if n % 3 == 0 or n % 5 == 0: s += n print(s)
命令行或輸出如下所示。
$ pip install pillow beautifulsoup4 PyMonad
新的術語和重要的詞語將顯示為黑體。在屏幕上(如菜單或對話框中)出現的文字按如下樣式顯示:“在現有的許多范式中,我們重點區分函數式編程和命令式編程。”
此圖標表示警告或需要特別注意的內容。
此圖標表示提示或技巧。
問題與反饋
一般反饋:發送郵件至feedback@packtpub.com并在主題處注明書名。如果對于本書有任何方面的疑問,請發送郵件至questions@packtpub.com。
勘誤:盡管我們盡力確保內容準確,但出錯仍在所難免。如果你在書中發現錯誤,不管是文本還是代碼,希望能告知我們,我們不勝感激。如果你發現任何錯誤,請訪問 http://www.packtpub.com/submit-errata,選擇書名,點擊Errata Submission Form鏈接,并輸入詳細說明。
反盜版:如果你發現我們的作品在互聯網上被以任何形式非法復制,請立即為我們提供地址或網站名稱,非常感謝。請把可疑盜版材料的鏈接發到copyright@packtpub.com。
成為作者:如果你掌握某個領域的專業知識,并且有興趣寫作圖書,請訪問authors.packtpub.com。
評論
請給出評論。閱讀、使用本書后,請在購買網站上留下評論。這樣潛在讀者可以參考你的意見來決定是否購買,Packt可以了解到你對該產品的看法,作者也能看到你對本書的反饋。謝謝!
想了解關于Packt的更多信息,請訪問packtpub.com。
電子書
掃描如下二維碼,即可購買本書電子版。

- Mastering NetBeans
- Python for Secret Agents:Volume II
- JavaScript+jQuery網頁特效設計任務驅動教程(第2版)
- PHP網絡編程學習筆記
- Learning Neo4j 3.x(Second Edition)
- Instant QlikView 11 Application Development
- Linux命令行與shell腳本編程大全(第4版)
- Linux Device Drivers Development
- .NET 3.5編程
- 持續輕量級Java EE開發:編寫可測試的代碼
- 軟件體系結構
- HTML5+CSS3+JavaScript 從入門到項目實踐(超值版)
- Django Design Patterns and Best Practices
- Web開發的平民英雄:PHP+MySQL
- Node.js實戰:分布式系統中的后端服務開發