摘要:實(shí)踐指南函數(shù)的藝術(shù)來(lái)源譯者飛龍協(xié)議函數(shù)是所有程序的要素,無(wú)論規(guī)模大小,并且在編程語(yǔ)言中作為我們表達(dá)計(jì)算過程的主要媒介。目前為止,我們討論了函數(shù)的形式特性,以及它們?nèi)绾问褂?。第一行描述函?shù)的任務(wù)。
1.4 實(shí)踐指南:函數(shù)的藝術(shù)
來(lái)源:1.4 Practical Guidance: The Art of the Function
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
函數(shù)是所有程序的要素,無(wú)論規(guī)模大小,并且在編程語(yǔ)言中作為我們表達(dá)計(jì)算過程的主要媒介。目前為止,我們討論了函數(shù)的形式特性,以及它們?nèi)绾问褂?。我們現(xiàn)在跳轉(zhuǎn)到如何編寫良好的函數(shù)這一話題。
每個(gè)函數(shù)都應(yīng)該只做一個(gè)任務(wù)。這個(gè)任務(wù)可以使用短小的名稱來(lái)定義,使用一行文本來(lái)標(biāo)識(shí)。順序執(zhí)行多個(gè)任務(wù)的函數(shù)應(yīng)該拆分在多個(gè)函數(shù)中。
不要重復(fù)勞動(dòng)(DRY)是軟件工程的中心法則。所謂的DRY原則規(guī)定多個(gè)代碼段不應(yīng)該描述重復(fù)的邏輯。反之,邏輯應(yīng)該只實(shí)現(xiàn)一次,指定一個(gè)名稱,并且多次使用。如果你發(fā)現(xiàn)自己在復(fù)制粘貼一段代碼,你可能發(fā)現(xiàn)了一個(gè)使用函數(shù)抽象的機(jī)會(huì)。
函數(shù)應(yīng)該定義得通常一些,準(zhǔn)確來(lái)說(shuō),平方并不是在 Python 庫(kù)中,因?yàn)樗?b>pow函數(shù)的一個(gè)特例,這個(gè)函數(shù)計(jì)算任何數(shù)的任何次方。
這些準(zhǔn)則提升代碼的可讀性,減少錯(cuò)誤數(shù)量,并且通常使編寫的代碼總數(shù)最小。將復(fù)雜的任務(wù)拆分為簡(jiǎn)潔的函數(shù)是一個(gè)技巧,它需要一些經(jīng)驗(yàn)來(lái)掌握。幸運(yùn)的是,Python 提供了一些特性來(lái)支持你的努力。
1.4.1 文檔字符串函數(shù)定義通常包含描述這個(gè)函數(shù)的文檔,叫做文檔字符串,它必須在函數(shù)體中縮進(jìn)。文檔字符串通常使用三個(gè)引號(hào)。第一行描述函數(shù)的任務(wù)。隨后的一些行描述參數(shù),并且澄清函數(shù)的行為:
>>> 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
當(dāng)你以函數(shù)名稱作為參數(shù)來(lái)調(diào)用help時(shí),你會(huì)看到它的文檔字符串(按下q來(lái)退出 Python 幫助)。
>>> help(pressure)
編寫 Python 程序時(shí),除了最簡(jiǎn)單的函數(shù)之外,都要包含文檔字符串。要記住,代碼只編寫一次,但是會(huì)閱讀多次。Python 文檔包含了文檔字符串準(zhǔn)則,它在不同的 Python 項(xiàng)目中保持一致。
1.4.2 參數(shù)默認(rèn)值定義普通函數(shù)的結(jié)果之一就是額外參數(shù)的引入。具有許多參數(shù)的函數(shù)調(diào)用起來(lái)非常麻煩,也難以閱讀。
在 Python 中,我們可以為函數(shù)的參數(shù)提供默認(rèn)值。調(diào)用這個(gè)函數(shù)時(shí),帶有默認(rèn)值的參數(shù)是可選的。如果它們沒有提供,默認(rèn)值就會(huì)綁定到形式參數(shù)的名稱上。例如,如果某個(gè)應(yīng)用通常用來(lái)計(jì)算一摩爾粒子的壓強(qiáng),這個(gè)值就可以設(shè)為默認(rèn):
>>> 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的定義接受三個(gè)參數(shù),但是在調(diào)用表達(dá)式中只提供了兩個(gè)。這種情況下,n的值通過def語(yǔ)句的默認(rèn)值獲得(它看起來(lái)像對(duì)n的賦值,雖然就像這個(gè)討論暗示的那樣,更大程度上它是條件賦值)。
作為準(zhǔn)則,用于函數(shù)體的大多數(shù)數(shù)據(jù)值應(yīng)該表示為具名參數(shù)的默認(rèn)值,這樣便于查看,以及被函數(shù)調(diào)用者修改。一些值永遠(yuǎn)不會(huì)改變,就像基本常數(shù)k_b,應(yīng)該定義在全局幀中。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/45484.html
摘要:另一個(gè)賦值語(yǔ)句將名稱關(guān)聯(lián)到出現(xiàn)在莎士比亞劇本中的所有去重詞匯的集合,總計(jì)個(gè)。表達(dá)式是一個(gè)復(fù)合表達(dá)式,計(jì)算出正序或倒序出現(xiàn)的莎士比亞詞匯集合。在意圖上并沒有按照莎士比亞或者回文來(lái)設(shè)計(jì),但是它極大的靈活性讓我們用極少的代碼處理大量文本。 1.1 引言 來(lái)源:1.1 Introduction 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 計(jì)算機(jī)科學(xué)是一個(gè)極其寬泛的學(xué)科。全球的分布...
摘要:函數(shù)體由表達(dá)式組成。我們說(shuō)頭部控制語(yǔ)句組。于是,函數(shù)體內(nèi)的賦值語(yǔ)句不會(huì)影響全局幀。包含了多種假值,包括和布爾值。布爾值表示了邏輯表達(dá)式中的真值。執(zhí)行測(cè)試以及返回布爾值的函數(shù)通常以開頭,并不帶下劃線例如等等。返回值之后會(huì)和預(yù)期結(jié)果進(jìn)行比對(duì)。 1.5 控制 來(lái)源:1.5 Control 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 我們現(xiàn)在可以定義的函數(shù)能力有限,因?yàn)槲覀冞€不知...
摘要:到目前為止,我們的環(huán)境只包含全局幀。要注意函數(shù)名稱是重復(fù)的,一個(gè)在幀中,另一個(gè)是函數(shù)的一部分。運(yùn)算符字表達(dá)式是全局幀中發(fā)現(xiàn)的名稱,綁定到了內(nèi)建的加法函數(shù)上。嚴(yán)格來(lái)說(shuō),這并不是問題所在不同局部幀中的的綁定是不相關(guān)的。 1.3 定義新的函數(shù) 來(lái)源:1.3 Defining New Functions 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 我們已經(jīng)在 Python 中認(rèn)識(shí)...
摘要:對(duì)象表示信息,但是同時(shí)和它們所表示的抽象概念行為一致。通過綁定行為和信息,對(duì)象提供了可靠獨(dú)立的日期抽象。名稱來(lái)源于實(shí)數(shù)在中表示的方式浮點(diǎn)表示。另一方面,對(duì)象可以表示很大范圍內(nèi)的分?jǐn)?shù),但是不能表示所有有理數(shù)。 2.1 引言 來(lái)源:2.1 Introduction 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 在第一章中,我們專注于計(jì)算過程,以及程序設(shè)計(jì)中函數(shù)的作用。我們看到了...
摘要:操作函數(shù)的函數(shù)叫做高階函數(shù)。這一節(jié)展示了高階函數(shù)可用作強(qiáng)大的抽象機(jī)制,極大提升語(yǔ)言的表現(xiàn)力。新的環(huán)境特性高階函數(shù)。這是因?yàn)榫植亢瘮?shù)的函數(shù)體的求值環(huán)境擴(kuò)展于定義處的求值環(huán)境。這種命名慣例并不由解釋器強(qiáng)制,只是函數(shù)名稱的一部分。 1.6 高階函數(shù) 來(lái)源:1.6 Higher-Order Functions 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 我們已經(jīng)看到,函數(shù)實(shí)際上是...
閱讀 2285·2021-11-25 09:43
閱讀 1233·2021-11-23 09:51
閱讀 3574·2021-11-23 09:51
閱讀 3701·2021-11-22 09:34
閱讀 1678·2021-10-09 09:43
閱讀 2191·2019-08-30 15:53
閱讀 3219·2019-08-30 14:07
閱讀 645·2019-08-28 18:14