欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

總結(jié)的幾個Python函數(shù)方法設(shè)計原則

系統(tǒng) 1608 0

在任何編程語言中,函數(shù)的應(yīng)用主要出于以下兩種情況:

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

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

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

【聚合】

每個函數(shù)只做一件事

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

【大小】

保持簡單、保持簡短

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

【耦合】

輸入使用參數(shù)、輸出使用return語句

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

慎用全局變量

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

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

            
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 #全局變量測試結(jié)果: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  #局部變量測試結(jié)果: 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ù)來做個拷貝,避免修改可變對象

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

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

比如說在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ù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品2020观看久久 | 色香首页| 亚洲成人精品 | 国亚洲欧美日韩精品 | 成人精品视频 成人影院 | 亚洲欧美日韩在线一区二区三区 | 亚洲综合99 | 91av导航| 国产视频一区二区 | 国产色在线 | 国产淫视| 亚洲午夜大片 | 夜夜久久 | 中文字幕不卡在线观看 | 久久久免费的精品 | 色哟哟哟在线精品观看视频 | 香港一级毛片在线播放 | 开操网 | 国产视频日韩 | 99热在线国产 | 免费看黄网站在线 | 中文线码中文高清播放中 | 亚洲综合色一区二区三区另类 | 综合欧美一区二区三区 | 麻豆短视频app网站 天天澡天天碰天天狠伊人五月 | 春色www在线视频观看 | 国产成人精品久久二区二区91 | 色综合久久综合欧美综合图片 | 欧美性免费视频 | 99亚洲精品高清一二区 | 王的女人印度剧电视剧免费观看32集 | 国产中文字幕在线 | 草逼com | 9999久久 | 日韩视频一区二区三区 | 亚洲一区二区在线播放 | 亚洲人人 | 日韩精品第一页 | 中文字幕在亚洲第一在线 | a毛片毛片av永久免费 | 国产精品亚洲成在人线 |