《Python編程金典》--函數

1.   python的程序組件包括函數、類、模塊和包。模塊是包含函數和類定義的文件。許多模塊可以組合成一個集合,稱爲

2.   模塊位於python安裝目錄的庫目錄下。在unix/linux下,是/usr/lib/python2.2/usr/local/lib/python2.2,windows上,則是\python\lib

3.   函數定義中創建的所有變量都是局部變量”--只存在於聲明它們的函數中。

4.   python定義了3個命名空間,分別是局部(local),全局(global)和內建(built-in)。程序訪問標識符的值時,python會按特定順序搜索命名空間(即按局部,全局和內建順序)。

5.   import random as randomModule 指定引用名。現在可以用randomModule來引用random 中的函數。

6.   重複使用重複的結構,如forwhile;遞歸使用選擇結構,如ifif/else。之間的差別是,重複採用一個重複結構,而遞歸採用重複的函數調用。兩者都要進行終止測試:重複會在循環繼續條件爲false時終止;遞歸在識別出基本條件是終止。由計數器控制的重複和遞歸都是逐漸終止:重複會不斷改變一個計數器,直到計數器的值使循環繼續條件變爲false遞歸則不斷對原始問題進行簡化,直到抵達基本條件。重複和遞歸都可無休止地進行:如果循環繼續檢測永遠都不能變成false,會發生無限循環;如果遞歸調用永遠不能將問題簡化成基本條件,會發生無窮遞歸。

7.   函數的默認參數設置需在def語句中定義。如:def test(aa=1,bb=2,cc=3):xxx

8.   關鍵字參數可以不按位置順序出現在函數調用中。用keyword = value方式就可以了。

4.2. 良好的編程習慣

1.   儘快熟悉核心python模塊提供的函數和類集合。

2.   避免變量名遮蔽外層作用域中的名稱。爲此,要注意避免標識符與內建命名空間中的標識符同名,並避免在程序中使用重複的標識符。

3.   使用默認參數可簡化函數調用的編寫,但有的程序員認爲,顯式指定所有參數會使程序更易讀。

4.3. 常見編程錯誤

1.   用局部命名空間中的一個標識符遮蔽模塊或內建命名空間中的一個標識符,可能引起邏輯錯誤。

2.   默認參數必須全部靠右。省略非靠右的參數是語法錯誤。

4.4. 移植性提示

1.   使用核心python模塊中的函數,通常可使用程序更易移植。

4.5. 軟件工程知識

1.   避免重複別人的勞動。儘量使用標準庫模塊函數,不要寫新函數。這樣可加快程序開發進度,並增強可靠性。因爲你所使用的是經良好設計和測試的代碼。

2.   每個函數都應該只限執行單一的、良好定義的任務,函數名應清楚地描述那個任務。

3.   如果實在想不出能準確表達函數作用的名稱,就表明函數可能執行了太多的分散任務,通常,最好把這種函數分解成多個更小的函數。

4.   程序應寫爲若干個小函數的集合。這樣使程序更易編寫、調試、維護和修改。

5.   如函數需要大量的參數,表明它執行的任務可能過多。請考慮將函數分解成更小的函數,令其執行單獨的任務。函數的def語句儘可能不超過一行。

6.   採用遞歸方式能解決的任何問題也可採用重複方式(非遞歸方式)解決。如果遞歸方式能夠更自然地反映問題,並使程序易於理解和調試,通常應該首選遞歸方式。通常,只需幾行代碼就可完成一個遞歸方式,重複方式則相反,它需要大量的代碼來實現。選擇遞歸的另一個原因是,重複方案也許不是很直觀。

7.   採用清晰的、層次清楚的方式對程序進行函數化,有助於保證良好的軟件工程,但性能上要付出一定代價。

4.6. 性能提示

1.   不要試圖改寫現成的模塊函數使其更高效,因爲這些函數已非常完美了。

2.   一般不要編寫會造成調用次數成指數級增加的斐波拉契式遞歸程序。

3.   避免對性能要求高的時候使用遞歸。遞歸調用既費時、又耗內存。

4.   一個由多個函數構成的程序,與一個沒有任何函數的一體式程序相比,會產生大量的函數調用,這些函數調用會佔用大量的處理器時間和內存。但另一方面,一體式程序的編程、測試、調試和維護都比較複雜。因此對程序進行函數化時要綜合考慮。保證能兼顧良好的性能和軟件工程。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章