摘要:實踐指南函數的藝術來源譯者飛龍協議函數是所有程序的要素,無論規模大小,并且在編程語言中作為我們表達計算過程的主要媒介。目前為止,我們討論了函數的形式特性,以及它們如何使用。第一行描述函數的任務。
1.4 實踐指南:函數的藝術
來源:1.4 Practical Guidance: The Art of the Function
譯者:飛龍
協議:CC BY-NC-SA 4.0
函數是所有程序的要素,無論規模大小,并且在編程語言中作為我們表達計算過程的主要媒介。目前為止,我們討論了函數的形式特性,以及它們如何使用。我們現在跳轉到如何編寫良好的函數這一話題。
每個函數都應該只做一個任務。這個任務可以使用短小的名稱來定義,使用一行文本來標識。順序執行多個任務的函數應該拆分在多個函數中。
不要重復勞動(DRY)是軟件工程的中心法則。所謂的DRY原則規定多個代碼段不應該描述重復的邏輯。反之,邏輯應該只實現一次,指定一個名稱,并且多次使用。如果你發現自己在復制粘貼一段代碼,你可能發現了一個使用函數抽象的機會。
函數應該定義得通常一些,準確來說,平方并不是在 Python 庫中,因為它是pow函數的一個特例,這個函數計算任何數的任何次方。
這些準則提升代碼的可讀性,減少錯誤數量,并且通常使編寫的代碼總數最小。將復雜的任務拆分為簡潔的函數是一個技巧,它需要一些經驗來掌握。幸運的是,Python 提供了一些特性來支持你的努力。
1.4.1 文檔字符串函數定義通常包含描述這個函數的文檔,叫做文檔字符串,它必須在函數體中縮進。文檔字符串通常使用三個引號。第一行描述函數的任務。隨后的一些行描述參數,并且澄清函數的行為:
>>> def pressure(v, t, n): """Compute the pressure in pascals of an ideal gas. Applies the ideal gas law: http://en.wikipedia.org/wiki/Ideal_gas_law v -- volume of gas, in cubic meters t -- absolute temperature in degrees kelvin n -- particles of gas """ k = 1.38e-23 # Boltzmann"s constant return n * k * t / v
當你以函數名稱作為參數來調用help時,你會看到它的文檔字符串(按下q來退出 Python 幫助)。
>>> help(pressure)
編寫 Python 程序時,除了最簡單的函數之外,都要包含文檔字符串。要記住,代碼只編寫一次,但是會閱讀多次。Python 文檔包含了文檔字符串準則,它在不同的 Python 項目中保持一致。
1.4.2 參數默認值定義普通函數的結果之一就是額外參數的引入。具有許多參數的函數調用起來非常麻煩,也難以閱讀。
在 Python 中,我們可以為函數的參數提供默認值。調用這個函數時,帶有默認值的參數是可選的。如果它們沒有提供,默認值就會綁定到形式參數的名稱上。例如,如果某個應用通常用來計算一摩爾粒子的壓強,這個值就可以設為默認:
>>> k_b=1.38e-23 # Boltzmann"s constant >>> def pressure(v, t, n=6.022e23): """Compute the pressure in pascals of an ideal gas. v -- volume of gas, in cubic meters t -- absolute temperature in degrees kelvin n -- particles of gas (default: one mole) """ return n * k_b * t / v >>> pressure(1, 273.15) 2269.974834
這里,pressure的定義接受三個參數,但是在調用表達式中只提供了兩個。這種情況下,n的值通過def語句的默認值獲得(它看起來像對n的賦值,雖然就像這個討論暗示的那樣,更大程度上它是條件賦值)。
作為準則,用于函數體的大多數數據值應該表示為具名參數的默認值,這樣便于查看,以及被函數調用者修改。一些值永遠不會改變,就像基本常數k_b,應該定義在全局幀中。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45484.html
摘要:另一個賦值語句將名稱關聯到出現在莎士比亞劇本中的所有去重詞匯的集合,總計個。表達式是一個復合表達式,計算出正序或倒序出現的莎士比亞詞匯集合。在意圖上并沒有按照莎士比亞或者回文來設計,但是它極大的靈活性讓我們用極少的代碼處理大量文本。 1.1 引言 來源:1.1 Introduction 譯者:飛龍 協議:CC BY-NC-SA 4.0 計算機科學是一個極其寬泛的學科。全球的分布...
摘要:函數體由表達式組成。我們說頭部控制語句組。于是,函數體內的賦值語句不會影響全局幀。包含了多種假值,包括和布爾值。布爾值表示了邏輯表達式中的真值。執行測試以及返回布爾值的函數通常以開頭,并不帶下劃線例如等等。返回值之后會和預期結果進行比對。 1.5 控制 來源:1.5 Control 譯者:飛龍 協議:CC BY-NC-SA 4.0 我們現在可以定義的函數能力有限,因為我們還不知...
摘要:到目前為止,我們的環境只包含全局幀。要注意函數名稱是重復的,一個在幀中,另一個是函數的一部分。運算符字表達式是全局幀中發現的名稱,綁定到了內建的加法函數上。嚴格來說,這并不是問題所在不同局部幀中的的綁定是不相關的。 1.3 定義新的函數 來源:1.3 Defining New Functions 譯者:飛龍 協議:CC BY-NC-SA 4.0 我們已經在 Python 中認識...
摘要:對象表示信息,但是同時和它們所表示的抽象概念行為一致。通過綁定行為和信息,對象提供了可靠獨立的日期抽象。名稱來源于實數在中表示的方式浮點表示。另一方面,對象可以表示很大范圍內的分數,但是不能表示所有有理數。 2.1 引言 來源:2.1 Introduction 譯者:飛龍 協議:CC BY-NC-SA 4.0 在第一章中,我們專注于計算過程,以及程序設計中函數的作用。我們看到了...
摘要:操作函數的函數叫做高階函數。這一節展示了高階函數可用作強大的抽象機制,極大提升語言的表現力。新的環境特性高階函數。這是因為局部函數的函數體的求值環境擴展于定義處的求值環境。這種命名慣例并不由解釋器強制,只是函數名稱的一部分。 1.6 高階函數 來源:1.6 Higher-Order Functions 譯者:飛龍 協議:CC BY-NC-SA 4.0 我們已經看到,函數實際上是...
閱讀 2197·2021-11-25 09:43
閱讀 1165·2021-11-23 09:51
閱讀 3499·2021-11-23 09:51
閱讀 3628·2021-11-22 09:34
閱讀 1543·2021-10-09 09:43
閱讀 2119·2019-08-30 15:53
閱讀 3161·2019-08-30 14:07
閱讀 568·2019-08-28 18:14