可愛的Python:Python中的函數編程(一)

來源:互聯網
上載者:User

儘管使用者通常將 Python 看作是一個過程性和物件導向語言,但它實際上包含了實現完整函數編程所需的每樣事物。本文討論了函數編程的常規概念,並說明了在 Python 中實現函數技術的方法。

我們最好從最難的問題開始:“到底什麼是函數編程 (FP)?”一個答案可能會說 FP 就是您在使用例如 Lisp、Scheme、Haskell、ML、OCAML、Clean、Mercury、Erlang(或其它一些)語言進行編程時所做的。這是一個穩妥的答案,但不能很確切地闡明問題。不幸的是,即使是函數程式員他們自己也很難對 FP 究竟是什麼有個一致的認識。“盲人摸象”的故事用來形容這一情況似乎很合適。還可以放心地將 FP 與“命令編程”(使用例如 C、Pascal、C++、Java、Perl、Awk、TCL 以及其它大多數語言所執行的操作,至少是在很大程度上)進行對比。

從個人角度來說,我會將函數編程粗略地描繪為至少具有以下幾個特徵。稱得上函數性的語言使這些事情變得簡單,而使其它事情變得困難或不可能:

函數是第一類(對象)。即,可以對“資料”進行的每樣操作都可以使用函數本身做到(例如將一個函數傳遞給另一個函數)。

將遞迴用作主要的控制結構。在某些語言中,不存在其它“迴圈”構造。

重點集中在列表 LISt 處理(例如,名稱 Lisp )。列表經常和子列表的遞迴一起使用以替代迴圈。

“純”函數語言能夠避免副作用。這不包括在命令語言中最普遍的模式,即指定第一個,然後將另一個值指定給同一個變數來跟蹤程式狀態。

FP 不鼓勵或根本不允許出現 語句,取而代之是使用運算式求值(換句話說,即函數加上自變數)。在很純粹的情況下,一個程式就是一個運算式(加上支援的定義)。

FP 關心的是計算 什麼而不是 如何計算。

許多 FP 利用了“更高等級”函數(換句話說,就是函數對一些函數操作,而這些函數又對其它函數操作)。

函數編程的提倡者認為所有這些特徵都導致更快速的開發更短以及錯誤更少的代碼。而且,電腦科學、邏輯和數學領域的進階理論學家發現證明函數語言和程式的正式效能比命令語言和程式容易得多。

固有的 Python 函數能力

自從 Python 1.0 以來,Python 具有上面列出的大多數 FP 特徵。但對於大多數 Python 特性,它們以一種非常混合的語言呈現。很大程度上是因為 Python 的 OOP 特性,您可以使用希望使用的部分而忽略其餘部分(直到在稍後需要它為止)。使用 Python 2.0, 列表內涵添加了一些 非常棒的“句法上的粉飾”。雖然列表內涵沒有添加什麼新的能力,但它們使許多舊的能力看起來好了 許多。

Python 中 FP 的基本元素是函數 map() 、 reduce() 和 filter() ,以及運算子 lambda 。在 Python 1.x 中, apply() 函數對於將一個函數的列表傳回值直接應用於另一個函數也很方便。Python 2.0 為這一目的提供了改進的文法。可能讓人吃驚,但很少的這幾個函數(以及基本運算子)幾乎足以編寫任何 Python程式;特別是,所有的流量控制語句( if 、 elif 、 else 、 assert 、 try 、 except 、 finally 、 for 、 break 、 continue 、 while 、 def )可以只使用 FP 函數和運算子以函數風格處理。雖然實際上消除程式中的所有流量控制命令可能只對加入“混亂的 Python”競爭(與看上去非常象 Lisp 的代碼)有用,但是理解 FP 是如何使用函數和遞迴來表示流量控制是值得的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.