摘要:調(diào)用函數(shù)就是通過(guò)函數(shù)名再傳入它需要的參數(shù)即可。遞歸函數(shù)遞歸函數(shù)就是函數(shù)自己調(diào)用自己。我們以計(jì)算一個(gè)整數(shù)的階乘來(lái)看看遞歸函數(shù)是什么樣子的。階乘的公式如下它的遞歸函數(shù)的定義如下遞歸函數(shù)都有一個(gè)跳出遞歸的條件,在本函數(shù)中就是。
函數(shù),是編程中很重要的一個(gè)概念。簡(jiǎn)單來(lái)說(shuō),函數(shù)是一段可重復(fù)使用的代碼段,給這段代碼起個(gè)名字就是“函數(shù)名”。在程序的任何地方都可以通過(guò)函數(shù)名來(lái)使用這段代碼,這就是“函數(shù)調(diào)用”。
函數(shù)的定義函數(shù)的概念,其實(shí)我們?cè)诔踔袛?shù)學(xué)中就接觸過(guò)了。比如,這個(gè)表達(dá)式y = 2x + 3,我們就稱(chēng)y是x的一次函數(shù)。寫(xiě)成Python函數(shù)就是這樣的:
def y(x): return 2 * x + 3
如上例所示,Python中定義一個(gè)函數(shù)的規(guī)則是這樣的:
首先是通過(guò)關(guān)鍵字def來(lái)確定它是一個(gè)函數(shù),后面跟著函數(shù)名(比如上面的y),函數(shù)名后面是小括號(hào)括起來(lái)的參數(shù),括號(hào)外面以冒號(hào):結(jié)尾這一行。這一行就是函數(shù)的聲明。
接下來(lái)是函數(shù)體的代碼片段,可以是一行也可以是多行,但它們比def多了一個(gè)縮進(jìn)。函數(shù)體最后一行可以通過(guò)關(guān)鍵字return返回一個(gè)或多個(gè)值。如果沒(méi)有寫(xiě)return,Python默認(rèn)為返回None。
有一種特殊的函數(shù)定義:空函數(shù),就是什么都不做的函數(shù),它通過(guò)一個(gè)pass語(yǔ)句來(lái)定義函數(shù)體:
def do_nothing(): pass
空函數(shù)主要是在我們寫(xiě)程序最開(kāi)始,想好都有哪些函數(shù)要寫(xiě),先定義成空函數(shù)再慢慢實(shí)現(xiàn)它們具體的功能。
同樣的,后面我們學(xué)習(xí)Python面向?qū)ο缶幊虝r(shí)類(lèi)(class)的定義也可以用pass來(lái)實(shí)現(xiàn)一個(gè)最小類(lèi):
class TheEmptyClass: pass函數(shù)的調(diào)用
定義好一個(gè)函數(shù)后,我們就可以調(diào)用(運(yùn)行)該函數(shù)了。調(diào)用函數(shù)就是通過(guò)函數(shù)名再傳入它需要的參數(shù)即可。
a = y(2) print("a is ", a) b = y(6) print("b is ", b)
結(jié)合函數(shù)y的定義,猜猜看a和b的值分別為多少吧。
函數(shù)y是一個(gè)數(shù)學(xué)運(yùn)算的函數(shù),它的參數(shù)應(yīng)該是整數(shù)或浮點(diǎn)數(shù)。如果我們給它傳一個(gè)字符串進(jìn)去,看看會(huì)有什么結(jié)果呢?
In [153]: y("a") ----------------- TypeError Traceback (most recent call last)in ----> 1 y("a") in y(x) 1 def y(x): ----> 2 return 2 * x + 3 3 TypeError: must be str, not int
根據(jù)函數(shù)體的語(yǔ)句,我們先把字符串"a"乘以2得到"aa",再計(jì)算"aa"字符串和整數(shù)3的加法就會(huì)報(bào)錯(cuò),因?yàn)樽址驼麛?shù)是不能做加法運(yùn)算的。
我們定義的函數(shù)y只有一個(gè)參數(shù),如果我們給它傳入兩個(gè)或更多參數(shù),同樣也會(huì)報(bào)錯(cuò)。小猿們可以自己試試看參數(shù)個(gè)數(shù)不對(duì)時(shí)是什么樣的錯(cuò)誤。
因此,函數(shù)的調(diào)用,需要滿(mǎn)足函數(shù)名、參數(shù)類(lèi)型、參數(shù)個(gè)數(shù)都要符合函數(shù)的定義才能運(yùn)行成功。
函數(shù)的返回值在Python中函數(shù)都是有返回值的。如果我們沒(méi)有通過(guò)return顯示的返回,則Python默認(rèn)返回None。通過(guò)return我們就可以規(guī)定函數(shù)返回我們想要的值。我們想要的值可能是一個(gè),也可能是兩個(gè)或多個(gè),return都能滿(mǎn)足我們的要求。
def my_division(a, b): quotient = a // b remainder = a % b return quotient, remainder
這個(gè)函數(shù)計(jì)算a除以b,返回它們的商和余數(shù)兩個(gè)值。return返回多個(gè)值時(shí),用逗號(hào),隔開(kāi)它們即可。
我們看看調(diào)用該函數(shù)運(yùn)行的結(jié)果:
In [158]: my_division(5, 2) Out[158]: (2, 1) In [159]: my_division(20, 7) Out[159]: (2, 6) In [160]: my_division(20, 5) Out[160]: (4, 0)
可以看到,函數(shù)返回多個(gè)值時(shí),這多個(gè)值組成了一個(gè)tuple(元組)。
遞歸函數(shù)遞歸函數(shù)就是函數(shù)自己調(diào)用自己。我們以計(jì)算一個(gè)整數(shù)的階乘來(lái)看看遞歸函數(shù)是什么樣子的。階乘的公式如下:
n! = n (n-1) (n-2) … 2 * 1
它的遞歸函數(shù)的定義如下:
def factorial(n): if n == 1: print(n) return 1 print(n, "*", end=" ") return n * factorial(n-1)
遞歸函數(shù)都有一個(gè)跳出遞歸的條件,在本函數(shù)中就是n == 1。當(dāng)n != 1時(shí)就遞歸調(diào)用求比當(dāng)前n小1的數(shù)的階乘,每次n減1,知道n == 1結(jié)束遞歸。這個(gè)遞歸過(guò)程其實(shí)就是生成了連乘(可以看函數(shù)的打印信息):
n (n-1) (n-2) … 2 * 1
In [169]: f = factorial(5) 5 * 4 * 3 * 2 * 1 In [170]: f = factorial(10) 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1總結(jié)
定義函數(shù)的要素:函數(shù)名、參數(shù)、函數(shù)體
調(diào)用函數(shù)的注意事項(xiàng):參數(shù)類(lèi)型、參數(shù)個(gè)數(shù)
函數(shù)體最后沒(méi)有使用return語(yǔ)句則默認(rèn)返回None
函數(shù)通過(guò)return返回一個(gè)或多個(gè)值,多個(gè)值以tuple的形式返回
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43768.html
摘要:同樣的用上節(jié)講的函數(shù)獲取元素的個(gè)數(shù)記住這是獲取的是列表個(gè)數(shù)個(gè)數(shù)個(gè)數(shù)重要的事說(shuō)三遍。用索引訪(fǎng)問(wèn)每個(gè)元素的位置,索引是從開(kāi)始的開(kāi)始的開(kāi)始的索引也是有容忍限度的超過(guò)了就會(huì)原地爆炸報(bào)錯(cuò)如果列表中元素個(gè)數(shù)賊多,想獲取后面的元素就要實(shí)行曲線(xiàn)救國(guó)了。 list和tuple是Python內(nèi)置的有序集合,一個(gè)是可變的,一個(gè)是不可變滴;這都不是事,主要是理解一下指向不變。 看圖說(shuō)話(huà): showImg(ht...
摘要:調(diào)用棧就是為了到達(dá)當(dāng)前執(zhí)行位置所調(diào)用的所有函數(shù)。由于無(wú)法控制回調(diào)函數(shù)的執(zhí)行方式,因此就沒(méi)有辦法控制調(diào)用位置得到期望的綁定,下一節(jié)我們會(huì)介紹如何通過(guò)固定來(lái)修復(fù)這個(gè)問(wèn)題。 在《你不知道的this》中我們排除了對(duì)于this的錯(cuò)誤理解,并且明白了每個(gè)函數(shù)的this是在調(diào)用時(shí)綁定的,完全取決于函數(shù)的調(diào)用位置。在本節(jié)中我們主要介紹一下幾個(gè)主要內(nèi)容: 什么是調(diào)用位置 綁定規(guī)則 this詞法 調(diào)用...
摘要:正在暑假中的課多周刊第期我們的微信公眾號(hào),更多精彩內(nèi)容皆在微信公眾號(hào),歡迎關(guān)注。若有幫助,請(qǐng)把課多周刊推薦給你的朋友,你的支持是我們最大的動(dòng)力。原理微信熱更新方案漲知識(shí)了,熱更新是以后的標(biāo)配。 正在暑假中的《課多周刊》(第1期) 我們的微信公眾號(hào):fed-talk,更多精彩內(nèi)容皆在微信公眾號(hào),歡迎關(guān)注。 若有幫助,請(qǐng)把 課多周刊 推薦給你的朋友,你的支持是我們最大的動(dòng)力。 遠(yuǎn)上寒山石徑...
摘要:正在暑假中的課多周刊第期我們的微信公眾號(hào),更多精彩內(nèi)容皆在微信公眾號(hào),歡迎關(guān)注。若有幫助,請(qǐng)把課多周刊推薦給你的朋友,你的支持是我們最大的動(dòng)力。原理微信熱更新方案漲知識(shí)了,熱更新是以后的標(biāo)配。 正在暑假中的《課多周刊》(第1期) 我們的微信公眾號(hào):fed-talk,更多精彩內(nèi)容皆在微信公眾號(hào),歡迎關(guān)注。 若有幫助,請(qǐng)把 課多周刊 推薦給你的朋友,你的支持是我們最大的動(dòng)力。 遠(yuǎn)上寒山石徑...
閱讀 3384·2023-04-25 20:37
閱讀 3142·2021-09-07 09:59
閱讀 1665·2019-08-29 12:43
閱讀 1185·2019-08-28 18:27
閱讀 479·2019-08-26 13:50
閱讀 2024·2019-08-26 10:33
閱讀 3591·2019-08-23 18:39
閱讀 2390·2019-08-23 18:09