日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

Python函數設計原則

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

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

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

當流程足夠復雜時,就要斟酌函數,及如何將函數組合在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




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 成人综合婷婷国产精品 | 成人国产精品视频 | 久久精品国产色蜜蜜麻豆 | 成人免费网站在线观看 | 国产一区二区精品免费 | 国产精品久久久久久久久久久免费看 | 国产精品久久亚洲7777 | 国产伦精品一区二区三区视频黑人 | 91新网站 | 欧美精品一二区 | 九九九九九精品 | 91九色网 | 亚洲视频第一页 | 国产精品久久久久国产a级 中文字幕影院 | 99精品视频在线观看免费 | 99久视频| 午夜激情在线 | 九一在线| 国产成人精品免费视频大全最热 | 亚洲一区二区三区四区五区午夜 | 黄色成年视频 | 中文字幕视频在线观看 | www.黄色片视频 | 麻豆传媒免费观看 | 亚洲精品乱码久久久久久动图 | 欧美一级在线视频 | 欧美亚洲日本国产 | 国产精品成人在线 | 爱情岛论坛首页网址 | 欧美黄色一级 | 麻豆专区 | 久久精品1| 色婷婷影院 | 国产伦精品一区二区三区照片 | 午夜三级 | 国产精品亚洲综合 | 欧美久久久久久 | 午夜精品在线观看 | av免费网站在线观看 | 亚洲精品视频一区 | 日批免费视频 |