
總結的幾個Python函數(shù)方法設計原則
在任何編程語言中,函數(shù)的應用主要出于以下兩種情況:
1.代碼塊重復,這時候必須考慮用到函數(shù),降低程序的冗余度
2.代碼塊復雜,這時候可以考慮用到函數(shù),增強程序的可讀性
當流程足夠繁雜時,就要考慮函數(shù),及如何將函數(shù)組合在一起。在Python中做函數(shù)設計,主要考慮到函數(shù)大小、聚合性、耦合性三個方面,這三者應該歸結于規(guī)劃與設計的范疇。高內聚、低耦合則是任何語言函數(shù)設計的總體原則。
1.如何將任務分解成更有針對性的函數(shù)從而導致了聚合性
2.如何設計函數(shù)間的通信則又涉及到耦合性
3.如何設計函數(shù)的大小用以加強其聚合性及降低其耦合性
【聚合】
每個函數(shù)只做一件事
完美的程序設計,每個函數(shù)應該而且只需做一件事。
比如說:把大象放進冰箱分三步:把門打開、把大象放進去、把門關上。
這樣就應該寫三個函數(shù)而不是一個函數(shù)拿所有的事全做了。這樣結構清晰,層次分明,也好理解!
【大小】
保持簡單、保持簡短
Python即是面向過程的語言,也是面向對象的語言,但更多的是充當腳本語言的角色。
同樣的功能,使用Python來實現(xiàn)其代碼長度也許是C/C++/Java等語言的1/3. 幾百行代碼就能實現(xiàn)不小的功能!
如果項目中設計的一個函數(shù)需要翻頁才能看完的話,就要考慮將函數(shù)拆分了。
在Python自帶的200多個模塊中,很少看到某個函數(shù)有兩、三頁的。
Python代碼以簡單明了著稱,一個過長或者有著深層嵌套的函數(shù)往往成為設計缺陷的征兆。
【耦合】
輸入使用參數(shù)、輸出使用return語句
這樣做可以讓函數(shù)獨立于它外部的東西。參數(shù)和return語句就是隔離外部依賴的最好的辦法。
慎用全局變量
第一重考慮: 全局變量通常是一種蹩腳的函數(shù)間的進行通信的方式。
它會引發(fā)依賴關系和計時的問題,從而會導致程序調試和修改的困難。
第二重考慮: 從代碼及性能優(yōu)化來考慮,本地變量遠比全局變量快。
根據(jù)Python對變量的搜索的先后順序: 本地函數(shù)變量==》上層函數(shù)變量==》全局變量==》內置變量
從上面可以看出,本地變量優(yōu)先被搜索,一旦找到,就此停下。下面專門對其做了測試,測試結果如下:
import profile
A = 5
def param_test():
B = 5
res = 0
for i in range(100000000):
res = B + i
return res
if __name__=='__main__':
profile.run('param_test()')
>>> ===================================== RESTART =====================================
>>>
5 function calls in 37.012 seconds #全局變量測試結果:37 秒
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 19.586 19.586 19.586 19.586 :0(range)
1 1.358 1.358 1.358 1.358 :0(setprofile)
1 0.004 0.004 35.448 35.448:1()
1 15.857 15.857 35.443 35.443 Learn.py:5(param_test)
1 0.206 0.206 37.012 37.012 profile:0(param_test())
0 0.000 0.000 profile:0(profiler)
>>> ===================================== RESTART =====================================
>>>
5 function calls in 11.504 seconds #局部變量測試結果: 11 秒
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 3.135 3.135 3.135 3.135 :0(range)
1 0.006 0.006 0.006 0.006 :0(setprofile)
1 0.000 0.000 11.497 11.497:1()
1 8.362 8.362 11.497 11.497 Learn.py:5(param_test)
1 0.000 0.000 11.504 11.504 profile:0(param_test())
0 0.000 0.000 profile:0(profiler)
避免改變可變類型參數(shù)
Python數(shù)據(jù)類型比如說列表、字典屬于可變對象。在作為參數(shù)傳遞給函數(shù)時,有時會像全局變量一樣被修改。
這樣做的壞處是:增強了函數(shù)之間的耦合性,從而導致函數(shù)過于特殊和不友好。維護起來也困難。
這個時候就要考慮使用切片S[:]和copy模塊中的copy()函數(shù)和deepcopy()函數(shù)來做個拷貝,避免修改可變對象
避免直接改變另一個模塊中的變量
比如說在b.py文件中導入a模塊,a中有變量PI = 3.14, 但b.py想將其修改為:PI = 3.14159, 在這里你就搞不清楚變量PI原先的值到底是多少。碰到這種情況,可以考慮用易懂的函數(shù)名來實現(xiàn):
#模塊a.py
PI = 3.14
def setPi(new):
PI = new
return PI
這樣既有自己想要的PI的值,又沒有改變a模塊中PI的值
import a
PI = a.setPi(3.14159)
print PI;a.PI
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關鍵? 在循環(huán)神經網絡(RNN)家族中,長短期記憶網絡(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務的價值轉化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預測分析中的應用:從數(shù)據(jù)查詢到趨勢預判? ? 在數(shù)據(jù)驅動決策的時代,預測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內權威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應對策略? 長短期記憶網絡(LSTM)作為循環(huán)神經網絡(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調研數(shù)據(jù)中的深度應用? 市場調研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉日期:解鎖數(shù)據(jù)處理的關鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎 ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03