函式,是程式設計中很重要的乙個概念。簡單來說,函式是一段可重複使用的**段,給這段**起個名字就是「函式名」。在程式的任何地方都可以通過函式名來使用這段**,這就是「函式呼叫」。
函式的定義
函式的概念,其實我們在初中數學中就接觸過了。比如,這個表示式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
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帝國cms Python基本資料型別
計算機的本質就是計算,在其內部是0和1的位元位的變化,對外表現就是資料的變化。那麼,計算機都能處理什麼資料呢?本質上,資料都是以位元組 byte 儲存的,表現上看,它們就是整數 浮點數和字串等。python的基本資料型別也不外乎於此。整數和浮點數就跟數學中的一樣,而字串就是各種字元的組合。數值型別 ...
帝國cms學習 從零學習帝國cms
從畢業後一直在用php寫後台程式也沒有用過相關的cms系統 現在開始學習帝國cms,學習順序 現在寫下來,作個記錄,希望對學習有幫組。有什麼錯誤 的地方,希望路過的朋友幫忙指正,3qqqq 2.安裝 3.入門教程 4.系統內建標籤語法介紹 5.我遇到過的問題就是更改模板裡的東西時,重新整理後還是原先...
騰訊帝國夢
如何才能讓qq擁有的眾多使用者資源變現成真金 這家依託即時通訊工具起家的網際網路公司給出的答案是 擴張!盡可能地擴張!依託qq這只 小企鵝 馬化騰開始了急速擴張,那麼,馬化騰野心勃勃構建的 全價值鏈 的網際網路帝國真的能實現嗎?新門戶征戰 我們正在設計新的商業模式。孫忠懷認為qq.com可以依靠即時...