多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > Python函數設計原則

Python函數設計原則

來源:程序員人生   發布時間:2015-01-15 08:29:31 閱讀次數:4914次

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

  • 代碼塊重復,這時候候必須斟酌用到函數,下降程序的冗余度
  • 代碼塊復雜,這時候候可以斟酌用到函數,增強程序的可讀性

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

  • 如何將任務分解成更有針對性的函數從而致使了聚合性
  • 如何設計函數間的通訊則又觸及到耦合性
  • 如何設計函數的大小用以加強其聚合性及下降其耦合性

聚合

  • 每一個函數只做1件事

完善的程序設計,每一個函數應當而且只需做1件事。

比如說:把大象放進冰箱分3步:把門打開、把大象放進去、把門關上。

這樣就應當寫3個函數而不是1個函數拿所有的事全做了。這樣結構清晰,層次分明,也好理解!


大小

  • 保持簡單、保持簡短

Python即是面向進程的語言,也是面向對象的語言,但更多的是充當腳本語言的角色。

一樣的功能,使用Python來實現其代碼長度或許是C/C++/Java等語言的1/3. 幾百行代碼就可以實現不小的功能!

如果項目中設計的1個函數需要翻頁才能看完的話,就要斟酌將函數拆分了。

在Python自帶的200多個模塊中,很少看到某個函數有兩、3頁的。

Python代碼以簡單明了著稱,1個太長或有著深層嵌套的函數常常成為設計缺點的征象。


耦合

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

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

  • 慎用全局變量

第1重斟酌: 全局變量通常是1種蹩腳的函數間的進行通訊的方式。

它會引發依賴關系和計時的問題,從而會致使程序調試和修改的困難。


第2重斟酌: 從代碼及性能優化來斟酌,本地變量遠比全局變量快。

根據Python對變量的搜索的前后順序: 本地函數變量==》上層函數變量==》全局變量==》內置變量

從上面可以看出,本地變量優先被搜索,1旦找到,就此停下。下面專門對其做了測試,測試結果以下:

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)

  • 避免改變可變類型參數

Python數據類型比如說列表、字典屬于可變對象。在作為參數傳遞給函數時,有時會像全局變量1樣被修改。

這樣做的壞處是:增強了函數之間的耦合性,從而致使函數過于特殊和不友好。保護起來也困難。

這個時候就要斟酌使用切片S[:]和copy模塊中的copy()函數和deepcopy()函數來做個拷貝,避免修改可變對象

具體參考這篇文章: Python中的深淺拷貝詳解  

  • 避免直接改變另外一個模塊中的變量

比如說在b.py文件中導入a模塊,a中有變量PI = 3.14, 但b.py想將其修改成:PI = 3.14159, 在這里你就弄不清楚變量PI本來的值究竟是多少。碰到這類情況,可以斟酌用易懂的函數名來實現:

#模塊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




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品视频在线播放 | 亚洲男人的天堂久久无 | h网站在线免费观看 | 免费尤物视频 | 欧美亚洲国产精品久久高清 | 中国人黑人xxⅹ性猛 | 国产精品k| 99久久精品一区二区三区 | 欧美性free xxx | 亚洲国产精品一区二区久久 | 国产一级做性视频 | 羞羞人成午夜爽爽影院 | 欧美日韩三 | 免费观看亚洲 | 国产女人视频免费观看 | 欧美在线暴力性xxxx | 中文字幕在线不卡精品视频99 | 欧美天堂在线视频 | 三级爱爱 | 欧美国产日韩久久久 | 性生生活网站免费 | 福利一区二区 | 国产欧美日韩一区二区三区视频 | 午夜男人网 | 中文字幕国产视频 | 精品亚洲综合在线第一区 | 日本乱妇18日本乱妇18p | 婷婷激情五月 | 欧美黑人巨大videos极品 | 伊人网络 | 亚洲天堂亚洲天堂 | 欧美日韩不卡码一区二区三区 | 亚洲高清免费视频 | 亚洲欧美一区二区三区蜜芽 | 在线亚洲精品国产成人二区 | 日产精品久久久一区二区 | 久久综合九色综合欧美狠狠 | 欧美性猛xxxbbb | 国产综合免费视频 | 亚洲成a人v天堂网 | 欧美激情一区二区亚洲专区 |