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