python基礎教程:函式,函式,函式,重要的事說三遍
函式,是程式設計中很重要的一個概念。簡單來說,函式是一段可重複使用的程式碼段,給這段程式碼起個名字就是“函式名”。在程式的任何地方都可以通過函式名來使用這段程式碼,這就是“函式呼叫”。

函式的定義
函式的概念,其實我們在初中數學中就接觸過了。比如,這個表示式 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') ----------------- TypeErrorTraceback (most recent call last) <ipython-input-153-1e7b94eb7c3d> in <module> ----> 1 y('a') <ipython-input-150-d8eda758862f> in y(x) 1 def y(x): ----> 2return 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的形式返回
大家在學python的時候肯定會遇到很多難題,以及對於新技術的追求,這裡推薦一下我們的Python學習扣qun:784758214,這裡是python學習者聚集地!!同時,自己是一名高階python開發工程師,從基礎的python指令碼到web開發、爬蟲、django、資料探勘等,零基礎到專案實戰的資料都有整理。送給每一位python的小夥伴!每日分享一些學習的方法和需要注意的小細節
