標籤:演算法 col 流程化 print 郵箱驗證 png http 寫代碼 info
編程範式
編程即寫程式or代碼,具體是指程式猿用特定的文法+資料結構+演算法編寫代碼,目的是用來告訴電腦如何執行任務。
如果把編程的過程比喻為練習武功,那麼編程範式指的就是武林中的各種流派,而在編程的世界裡最常見的兩大流派就是:面向過程和物件導向
面向過程和物件導向在不同的情境下都各有優劣,誰好誰壞不能一概而論,下面就讓我們來詳細瞭解它們。
面向過程的程式設計
概念:
核心是“過程”二字,“過程”指的是解決問題的步驟,即先幹什麼再幹什麼。。。。,基於面向過程設計程式就好比設計一條流水線,是一種機械式的思維方式。若程式一開始是要著手解決一個大的問題,面向過程的基本設計思路就是把這個大的問題分解成很多個小問題或子過程,這些子過程在執行的過程中繼續分解,直到小問題足夠簡單到可以在一個小步驟範圍內解決。
優點是:
複雜的問題流程化,進而簡單化(一個複雜的問題,分成一個個小的步驟去實現,實現小的步驟將會非常簡單)
舉個典型的面向過程的例子,寫一個註冊程式,分三步,輸入使用者名稱,密碼,驗證,寫入資料庫。
import jsonimport redef interactive(): name=input(‘>>: ‘).strip() pwd=input(‘>>: ‘).strip() return { ‘name‘:name, ‘pwd‘:pwd, }def check(user_info): is_valid=True if len(user_info[‘name‘]) == 0: print(‘使用者名稱不可為空‘) is_valid=False if len(user_info[‘pwd‘]) < 6: print(‘密碼不能少於6位‘) is_valid=False return { ‘is_valid‘:is_valid, ‘user_info‘:user_info }def register(check_info): if check_info[‘is_valid‘]: with open(‘db.json‘,‘w‘,encoding=‘utf-8‘) as f: json.dump(check_info[‘user_info‘],f)def main(): user_info=interactive() check_info=check(user_info) register(check_info)if __name__ == ‘__main__‘: main()
缺點是:
一套流水線或者流程就是用來解決一個問題,比如生產汽水的流水線無法生產汽車,即便是能,也得是大改,改一個組件,與其相關的組件都需要修改,牽一髮而動全身,擴充性極差。
比如我們要加一個郵箱驗證功能,那麼和郵箱相關的代碼都要改,代碼如下:
import jsonimport redef interactive(): name=input(‘>>: ‘).strip() pwd=input(‘>>: ‘).strip() email=input(‘>> ‘).strip() return { ‘name‘:name, ‘pwd‘:pwd, ‘email‘:email }def check(user_info): is_valid=True if len(user_info[‘name‘]) == 0: print(‘使用者名稱不可為空‘) is_valid=False if len(user_info[‘pwd‘]) < 6: print(‘密碼不能少於6位‘) is_valid=False if not re.search(r‘@.*?\.com$‘,user_info[‘email‘]): print(‘郵箱格式不合法‘) is_valid=False return { ‘is_valid‘:is_valid, ‘user_info‘:user_info }def register(check_info): if check_info[‘is_valid‘]: with open(‘db.json‘,‘w‘,encoding=‘utf-8‘) as f: json.dump(check_info[‘user_info‘],f)def main(): user_info=interactive() check_info=check(user_info) register(check_info)if __name__ == ‘__main__‘: main()
應用情境:
面向過程的程式設計思想一般用於那些功能一旦實現之後就很少需要改變的情境, 如果你只是寫一些簡單的指令碼,去做一些一次性任務,用面向過程的方式是極好的,著名的例子有Linux內核,git,以及Apache HTTP Server等。但如果你要處理的任務是複雜的,且需要不斷迭代和維護 的, 那還是用物件導向最方便了。
物件導向的程式設計
概念:
核心是“對象”二字,對象是特徵與技能的結合體。
優點是:
可擴充性強
缺點是:
編程複雜度高
應用情境:
使用者需求經常變化,互連網應用,遊戲,企業內部應用
python物件導向:什麼是物件導向程式設計