最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年06月03日 10:31:36   投稿:junjie  
這篇文章主要介紹了總結(jié)的幾個Python函數(shù)方法設(shè)計原則,本文講解了每個函數(shù)只做一件事、保持簡單、保持簡短、輸入使用參數(shù)、輸出使用return語句等內(nèi)容,需要的朋友可以參考下

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

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

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

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

【聚合】

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

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

【大小】

保持簡單、保持簡短

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

【耦合】

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

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

慎用全局變量

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

第二重考慮: 從代碼及性能優(yōu)化來考慮,本地變量遠(yuǎn)比全局變量快。
根據(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 <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  #局部變量測試結(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 <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) 



避免改變可變類型參數(shù)

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

這樣做的壞處是:增強(qiáng)了函數(shù)之間的耦合性,從而導(dǎo)致函數(shù)過于特殊和不友好。維護(hù)起來也困難。

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

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

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

比如說在b.py文件中導(dǎo)入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 

相關(guān)文章

  • Python光學(xué)仿真學(xué)習(xí)衍射算法初步理解

    Python光學(xué)仿真學(xué)習(xí)衍射算法初步理解

    這篇文章主要為大家介紹了Python光學(xué)仿真學(xué)習(xí)中對衍射算法的初步理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • 新一代Python包管理工具

    新一代Python包管理工具

    這篇文章主要介紹了新一代Python包管理工具,Python包管理工具,一般就會想到想到pip、conda等經(jīng)典工具,本篇文章要介紹的是一款新穎的Python包管理工具pdm,需要的小伙伴可以參考一下
    2022-02-02
  • python+selenium實現(xiàn)163郵箱自動登陸的方法

    python+selenium實現(xiàn)163郵箱自動登陸的方法

    本篇文章主要介紹了python+selenium實現(xiàn)163郵箱自動登陸的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Python重復(fù)文件批量整理工具的設(shè)計與實現(xiàn)

    Python重復(fù)文件批量整理工具的設(shè)計與實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何通關(guān)Python編寫一個重復(fù)文件批量整理工具,可以在文件夾內(nèi)對文件進(jìn)行去重和分類存儲,有需要的可以了解下
    2025-02-02
  • 啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例

    啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例

    今天小編就為大家分享一篇關(guān)于啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 《Python學(xué)習(xí)手冊》學(xué)習(xí)總結(jié)

    《Python學(xué)習(xí)手冊》學(xué)習(xí)總結(jié)

    本篇文章是讀者朋友在學(xué)習(xí)了《Python學(xué)習(xí)手冊》這本書以后,總結(jié)出的學(xué)習(xí)心得,值得大家參考學(xué)習(xí)。
    2018-01-01
  • 詳解Python如何利用petl做數(shù)據(jù)遷移

    詳解Python如何利用petl做數(shù)據(jù)遷移

    隨著數(shù)據(jù)量的不斷增長,數(shù)據(jù)遷移成為了一項必不可少的任務(wù),本文就來為大家詳細(xì)介紹一下如何使用PETL進(jìn)行數(shù)據(jù)遷移,并給出一些實踐案例,需要的可以參考下
    2024-01-01
  • http請求 request失敗自動重新嘗試代碼示例

    http請求 request失敗自動重新嘗試代碼示例

    這篇文章主要介紹了http請求 request失敗自動重新嘗試代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python實戰(zhàn)小項目之身份證信息校驗

    Python實戰(zhàn)小項目之身份證信息校驗

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python做一個身份證信息校驗的小項目,大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-10-10
  • Python 腳本死鎖問題與解決方案

    Python 腳本死鎖問題與解決方案

    在腳本中,可以創(chuàng)建一個隊列來存儲子進(jìn)程的輸出,然后由主進(jìn)程從隊列中讀取輸出并進(jìn)行處理,這篇文章主要介紹了Python 腳本死鎖問題與解決方案,需要的朋友可以參考下
    2024-06-06

最新評論

关岭| 乡宁县| 古蔺县| 北票市| 色达县| 郧西县| 临湘市| 册亨县| 罗源县| 陆川县| 京山县| 兴化市| 三河市| 马鞍山市| 柏乡县| 吐鲁番市| 闽清县| 齐齐哈尔市| 邵阳市| 淄博市| 宁都县| 黄大仙区| 珠海市| 安泽县| 禄丰县| 夹江县| 永登县| 巧家县| 淅川县| 黄浦区| 北流市| 临西县| 乐陵市| 基隆市| 泰宁县| 南华县| 宿州市| 平山县| 秭归县| 高邮市| 囊谦县|