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