国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python函數式編程指南(一):函數式編程概述

2020-02-23 01:38:32
字體:
來源:轉載
供稿:網友

1. 函數式編程概述

1.1. 什么是函數式編程?

函數式編程使用一系列的函數解決問題。函數僅接受輸入并產生輸出,不包含任何能影響產生輸出的內部狀態。任何情況下,使用相同的參數調用函數始終能產生同樣的結果。

在一個函數式的程序中,輸入的數據“流過”一系列的函數,每一個函數根據它的輸入產生輸出。函數式風格避免編寫有“邊界效應”(side effects)的函數:修改內部狀態,或者是其他無法反應在輸出上的變化。完全沒有邊界效應的函數被稱為“純函數式的”(purely functional)。避免邊界效應意味著不使用在程序運行時可變的數據結構,輸出只依賴于輸入。

可以認為函數式編程剛好站在了面向對象編程的對立面。對象通常包含內部狀態(字段),和許多能修改這些狀態的函數,程序則由不斷修改狀態構成;函數式編程則極力避免狀態改動,并通過在函數間傳遞數據流進行工作。但這并不是說無法同時使用函數式編程和面向對象編程,事實上,復雜的系統一般會采用面向對象技術建模,但混合使用函數式風格還能讓你額外享受函數式風格的優點。

1.2. 為什么使用函數式編程?

函數式的風格通常被認為有如下優點:

1.邏輯可證
這是一個學術上的優點:沒有邊界效應使得更容易從邏輯上證明程序是正確的(而不是通過測試)。
2.模塊化
函數式編程推崇簡單原則,一個函數只做一件事情,將大的功能拆分成盡可能小的模塊。小的函數更易于閱讀和檢查錯誤。
3.組件化
小的函數更容易加以組合形成新的功能。
4.易于調試
細化的、定義清晰的函數使得調試更加簡單。當程序不正常運行時,每一個函數都是檢查數據是否正確的接口,能更快速地排除沒有問題的代碼,定位到出現問題的地方。
5.易于測試
不依賴于系統狀態的函數無須在測試前構造測試樁,使得編寫單元測試更加容易。
6.更高的生產率
函數式編程產生的代碼比其他技術更少(往往是其他技術的一半左右),并且更容易閱讀和維護。

1.3. 如何辨認函數式風格?

支持函數式編程的語言通常具有如下特征,大量使用這些特征的代碼即可被認為是函數式的:

函數是一等公民

函數能作為參數傳遞,或者是作為返回值返回。這個特性使得模板方法模式非常易于編寫,這也促使了這個模式被更頻繁地使用。
以一個簡單的集合排序為例,假設lst是一個數集,并擁有一個排序方法sort需要將如何確定順序作為參數。
如果函數不能作為參數,那么lst的sort方法只能接受普通對象作為參數。這樣一來我們需要首先定義一個接口,然后定義一個實現該接口的類,最后將該類的一個實例傳給sort方法,由sort調用這個實例的compare方法,就像這樣:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 稷山县| 石台县| 青田县| 颍上县| 温州市| 威宁| 禹城市| 彭泽县| 西安市| 北宁市| 昌黎县| 太谷县| 阿拉善右旗| 秦皇岛市| 胶南市| 平遥县| 昆明市| 建瓯市| 边坝县| 潜山县| 宜宾县| 于田县| 九江县| 弋阳县| 邓州市| 会东县| 靖边县| 麟游县| 涞水县| 巴彦淖尔市| 建德市| 浮梁县| 甘德县| 子洲县| 南通市| 信丰县| 五家渠市| 绥棱县| 郧西县| 资源县| 东乡|