當前位置:成語大全網 - 書法字典 - 總結了Python函數方法的幾個設計原則

總結了Python函數方法的幾個設計原則

在任何編程語言中,函數的應用主要是由於以下兩種情況:

1.代碼塊被復制。這時候就必須考慮函數,減少程序的冗余。

2.代碼塊很復雜。這時可以考慮用函數來增強程序的可讀性。

當流程足夠復雜時,就要考慮功能以及如何組合。Python中的函數設計主要考慮三個方面:函數大小、聚合和耦合,應該歸屬於規劃設計的範疇。高內聚和低耦合是任何語言功能設計的壹般原則。

1.如何將任務分解成更有針對性的功能,從而產生聚合。

2.如何設計函數間的通信涉及到耦合。

3.如何設計函數的大小以增強其聚集性,降低其耦合性?

聚合

每個函數只做壹件事。

完美的編程,每個函數應該且只需要做壹件事。

比如把大象放進冰箱,分三步:開門、放大象進去、關門。

所以妳應該寫三個函數而不是壹個函數來做所有的事情。這個結構清晰,層次分明,簡單易懂!

大小

保持簡單和簡短。

Python既是面向過程的語言,也是面向對象的語言,但更多的是壹種腳本語言。

同樣的功能,用Python實現其代碼長度可能是C/C++/Java等語言的1/3。幾百行代碼可以實現很多功能!

如果項目中設計的某個功能需要翻頁才能完成閱讀,就要考慮拆分功能了。

在Python的200多個模塊中,很少看到壹個函數有兩三頁。

Python代碼以簡單著稱,過長或嵌套過深的函數通常是設計缺陷的標誌。

連接

使用參數輸入,使用return語句輸出。

這樣做可以使函數獨立於外部。參數和返回語句是隔離外部依賴的最佳方式。

謹慎使用全局變量

首先要考慮的是:全局變量通常是函數間交流的蹩腳方式。

會導致依賴和時序問題,導致程序調試和修改困難。

第二點考慮:從代碼和性能優化的角度來看,局部變量比全局變量快得多。

按照Python對變量的搜索順序:局部函數變量= = "上層函數變量= = "全局變量= = "內置變量。

從上面可以看出,先搜索局部變量,壹旦找到就停止。下面是壹個特殊的測試,測試結果如下:

導入配置文件

A = 5

def參數測試():

B = 5

res = 0

對於範圍內的I(10000000):

res = B + i

返回資源

if __name__=='__main__ ':

profile.run('param_test()')

& gt& gt& gt============================ = = =重啟= = = = = = = = = = = = = = = = = = = = = = = = = = = =

& gt& gt& gt

37.012秒內5次函數調用#全局變量測試結果:37秒。

排序依據:標準名稱

n調用總時間百分比調用累計時間百分比調用文件名:行號(函數)

1 19.586 19.586 19.586 19.586:0(範圍)

1 1.358 1.358 1.358 1.358:0(set profile)

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配置文件:0(param_test())

0 0.000 0.000配置文件:0(探查器)

& gt& gt& gt============================ = = =重啟= = = = = = = = = = = = = = = = = = = = = = = = = = = =

& gt& gt& gt

11.504秒內5次函數調用#局部變量測試結果:11秒。

排序依據:標準名稱

n調用總時間百分比調用累計時間百分比調用文件名:行號(函數)

1 3.135 3.135 3.135 3.135:0(範圍)

1 0.006 0.006 0.006 0.006:0(set profile)

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配置文件:0(param_test())

0 0.000 0.000配置文件:0(探查器)

避免更改變量類型參數。

列表和字典等Python數據類型是可變對象。當作為參數傳遞給函數時,它有時會像全局變量壹樣被修改。

這樣做的缺點是增強了功能之間的耦合性,導致功能過於特殊,不友好。也很難維持。

這時要考慮使用slice S[:]和copy模塊中的copy()函數和deepcopy()函數進行復制,避免修改可變對象。

詳情請參考本文:Python中深度和淺層復制的詳細講解。

避免在另壹個模塊中直接改變變量。

比如妳把模塊A導入到壹個b.py文件中,A中有壹個變量PI = 3.14,但是b.py想把它修改成:PI = 3.14159,這樣妳就搞不清楚變量PI的初始值是什麽了。在這種情況下,您可以考慮使用易於理解的函數名:

#模塊a.py

PI = 3.14

def setPi(新):

PI =新

返回PI

這不僅有妳想要的圓周率的值,而且不會改變模塊a中圓周率的值。

導入a

PI = a.setPi(3.14159)

打印PI;答:PI