程式設計正規化 面向過程與函式式

2021-10-23 20:07:23 字數 1651 閱讀 5667

一、 面向過程

​ 基於面向過程開發程式就好比在設計一條流水線,若程式一開始是要著手解決乙個大的問題,按照過程式的思路就是把這個大的問題分解成很多個小問題或子過程去實現,然後依次呼叫即可,這極大地降低了程式的複雜度。舉例如下:

​ 寫乙個資料遠端備份程式,分三步:本地資料打包,上傳至雲伺服器,檢測備份檔案可用性

面向過程總結:

1、優點

將複雜的問題流程化,進而簡單化

2、缺點

程式的可擴充套件性極差,因為一套流水線或者流程就是用來解決乙個問題

二、 函式式

函式式程式設計並非用函式程式設計這麼簡單,而是將計算機的運算視為數學意義上的運算,比起面向過程,函式式更加注重的是執行結果而非執行的過程,代表語言有:haskell、erlang。而python並不是一門函式式程式語言,但是仍為我們提供了很多函式式程式設計好的特性,如lambda,map(對映),reduce,filter

lambda 引數1

,引數2,.

..: expression

舉例

# 1、定義

lambda x,y,z:x+y+z

#等同於

deffunc

(x,y,z)

:return x+y+z

# 2、呼叫

# 方式一:

res=

(lambda x,y,z:x+y+z)(1

,2,3

)# 方式二:

func=

lambda x,y,z:x+y+z # 「匿名」的本質就是要沒有名字,所以此處為匿名函式指定名字是沒有意義的

res=func(1,

2,3)

三、 map filter reduce !!!

1、 map 對映

map(動作,可迭代物件)

# l=['alex','lxx','wxx']

# new_l=[name+'_dsb' for name in l]

# print(new_l)

# res=map(lambda name:name+'_dsb',l) # (動作,可迭代物件)(和上面效果一樣)

# print(res) # 生成器

2、 filter 迭代篩選

filter(判斷語句返回布林值,可迭代物件)

# l=['alex_sb','lxx_sb','wxx']

# res=(name for name in l if name.endswith('sb'))

# print(res)

# res=filter(lambda name:name.endswith('sb'),l)

(和上面效果一樣)

# print(res)

3、 reduce 合併 (不再是內建函式)

from functools import

reduce

reduce(lambda x,y:x+y,[1

,2,3

],10)#13 3

# res=reduce(lambda x,y:x+y,['a','b','c']) # 'a','b'

# print(res)

面向過程程式設計,函式式程式設計

面向過程程式設計,函式式程式設計 峰哥原創面向過程解釋 函式的引數傳入,是函式吃進去的食物,而函式return的返回值,是函式拉出來的結果,面向過程的思路就是,把程式的執行當做一串首尾相連的函式,乙個函式吃,拉出的東西給另外乙個函式吃,另外乙個函式吃了再繼續拉給下乙個函式吃。面向過程 機械式思維,流...

面向過程與函式式

目錄演算法 是高效解決問題的辦法 演算法之二分法 需求 有乙個按照從小到大順序排列的數字列表需要從該數字列表中找到我們想要的那個乙個數字如何做更高效?nums 3,4,7,10,13,21,43,77,89 find num 10 nums 3,4,13,10,2,7,89 nums.sort pr...

物件導向程式設計與面向過程程式設計

面向過程程式設計 面向過程程式設計是一種以過程為中心的程式設計思想,分析出解決問題的步驟,然後用函式把這些步驟一步一步實現。面向過程程式設計,資料和對資料的操作是分離的。物件導向程式設計 物件導向程式設計是將事物物件化,通過物件通訊來解決問題。物件導向程式設計,資料和對資料的操作是繫結在一起的。物件...