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

首頁 > 編程 > Python > 正文

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

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

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

1.代碼塊重復,這時候必須考慮用到函數,降低程序的冗余度
2.代碼塊復雜,這時候可以考慮用到函數,增強程序的可讀性

當流程足夠繁雜時,就要考慮函數,及如何將函數組合在一起。在Python中做函數設計,主要考慮到函數大小、聚合性、耦合性三個方面,這三者應該歸結于規劃與設計的范疇。高內聚、低耦合則是任何語言函數設計的總體原則。

1.如何將任務分解成更有針對性的函數從而導致了聚合性
2.如何設計函數間的通信則又涉及到耦合性
3.如何設計函數的大小用以加強其聚合性及降低其耦合性

【聚合】

每個函數只做一件事

完美的程序設計,每個函數應該而且只需做一件事。
比如說:把大象放進冰箱分三步:把門打開、把大象放進去、把門關上。
這樣就應該寫三個函數而不是一個函數拿所有的事全做了。這樣結構清晰,層次分明,也好理解!

【大小】

保持簡單、保持簡短

Python即是面向過程的語言,也是面向對象的語言,但更多的是充當腳本語言的角色。
同樣的功能,使用Python來實現其代碼長度也許是C/C++/Java等語言的1/3. 幾百行代碼就能實現不小的功能!
如果項目中設計的一個函數需要翻頁才能看完的話,就要考慮將函數拆分了。
在Python自帶的200多個模塊中,很少看到某個函數有兩、三頁的。
Python代碼以簡單明了著稱,一個過長或者有著深層嵌套的函數往往成為設計缺陷的征兆。

【耦合】

輸入使用參數、輸出使用return語句

這樣做可以讓函數獨立于它外部的東西。參數和return語句就是隔離外部依賴的最好的辦法。

慎用全局變量

第一重考慮: 全局變量通常是一種蹩腳的函數間的進行通信的方式。
它會引發依賴關系和計時的問題,從而會導致程序調試和修改的困難。

第二重考慮: 從代碼及性能優化來考慮,本地變量遠比全局變量快。
根據Python對變量的搜索的先后順序: 本地函數變量==》上層函數變量==》全局變量==》內置變量
從上面可以看出,本地變量優先被搜索,一旦找到,就此停下。下面專門對其做了測試,測試結果如下:

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 <string>:1(<module>)     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 <string>:1(<module>)     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)             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 磴口县| 高淳县| 普格县| 赫章县| 青冈县| 密云县| 那曲县| 乌拉特中旗| 浦县| 屏东市| 镶黄旗| 财经| 临西县| 保德县| 抚顺县| 乐清市| 满城县| 南召县| 绍兴市| 涟源市| 淳安县| 长海县| 天长市| 安义县| 洛扎县| 磐安县| 渝北区| 甘肃省| 巴彦淖尔市| 宝丰县| 普宁市| 兴安县| 罗江县| 垫江县| 金坛市| 吴旗县| 明光市| 色达县| 隆德县| 高密市| 昭平县|