這大概算是python最難啃的一塊骨頭吧。在我python生涯的這一年裡,我遇到了一些pythoner,他們毫無例外地完全不會使用函式式程式設計(有些人喜歡稱為pythonic),比如,從來不會傳遞函式,不知道lambda是什麼意思,知道列表展開但從來不知道用在**,對python不提供經典for迴圈感到無所適從,言談之中表現出對函式式風格的一種抗拒甚至厭惡。1. 函式式程式設計概述我嘗試剖析這個問題,最終總結了這麼兩個原因:1、不想改變,認為現有的知識可以完成任務;2、對小眾語言的歧視,python目前在國內市場份額仍然很小很小,熟悉python風格用處不大。
1.1. 什麼是函式式程式設計?
函式式程式設計使用一系列的函式解決問題。函式僅接受輸入並產生輸出,不包含任何能影響產生輸出的內部狀態。任何情況下,使用相同的引數呼叫函式始終能產生同樣的結果。
在乙個函式式的程式中,輸入的資料「流過」一系列的函式,每乙個函式根據它的輸入產生輸出。函式式風格避免編寫有「邊界效應」(side effects)的函式:修改內部狀態,或者是其他無法反應在輸出上的變化。完全沒有邊界效應的函式被稱為「純函式式的」(purely functional)。避免邊界效應意味著不使用在程式執行時可變的資料結構,輸出只依賴於輸入。
可以認為函式式程式設計剛好站在了物件導向程式設計的對立面。物件通常包含內部狀態(字段),和許多能修改這些狀態的函式,程式則由不斷修改狀態構成;函式式程式設計則極力避免狀態改動,並通過在函式間傳遞資料流進行工作。但這並不是說無法同時使用函式式程式設計和物件導向程式設計,事實上,複雜的系統一般會採用物件導向技術建模,但混合使用函式式風格還能讓你額外享受函式式風格的優點。
1.2. 為什麼使用函式式程式設計?
函式式的風格通常被認為有如下優點:
1.3. 如何辨認函式式風格?
支援函式式程式設計的語言通常具有如下特徵,大量使用這些特徵的**即可被認為是函式式的:
Python函式式程式設計指南(一) 概述
這大概算是python最難啃的一塊骨頭吧。在我python生涯的這一年裡,我遇到了一些pythoner,他們毫無例外地完全不會使用函式式程式設計 有些人喜歡稱為pythonic 比如,從來不會傳遞函式,不知道lambda是什麼意思,知道列表展開但從來不知道用在 對python不提供經典for迴圈感到...
Python函式式程式設計指南(一) 概述
這大概算是python最難啃的一塊骨頭吧。在我python生涯的這一年裡,我遇到了一些pythoner,他們毫無例外地完全不會使用函式式程式設計 有些人喜歡稱為pythonic 比如,從來不會傳遞函式,不知道lambda是什麼意思,知道列表展開但從來不知道用在 對python不提供經典for迴圈感到...
Python函式式程式設計指南(一) 概述
這大概算是python最難啃的一塊骨頭吧。在我python生涯的這一年裡,我遇到了一些pythoner,他們毫無例外地完全不會使用函式式程式設計 有些人喜歡稱為pythonic 比如,從來不會傳遞函式,不知道lambda是什麼意思,知道列表展開但從來不知道用在 對python不提供經典for迴圈感到...