1 調(diào)用函數(shù)
函數(shù)使我們的計算更加方便。
Python內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。要調(diào)用一個函數(shù),需要知道函數(shù)的名稱和參數(shù),比如求絕對
值的函數(shù) abs,它接收一個參數(shù)。可以直接從Python的官方網(wǎng)站查看文檔:
http://docs.python.org/2/library/functions.html#abs。也可以在交互式命令行通過 help(abs) 查看abs函數(shù)的
幫助信息。
調(diào)用函數(shù)的時候,如果傳入的參數(shù)數(shù)量不對,會報TypeError的錯誤,并且Python會明確地告訴你:abs()有且僅
有1個參數(shù),但給出了兩個:
>>> abs(1, 2)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: abs() takes exactly one argument (2 given)
如果傳入的參數(shù)數(shù)量是對的,但參數(shù)類型不能被函數(shù)所接受,也會報TypeError的錯誤,并且給出錯誤信息:str
是錯誤的參數(shù)類型:
>>> abs('a')Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: bad Operand type for abs(): 'str'
2 編寫函數(shù)
在Python中,定義一個函數(shù)要使用 def 語句,依次寫出函數(shù)名、括號、括號中的參數(shù)和冒號:,然后,在縮進塊
中編寫函數(shù)體,函數(shù)的返回值用 return 語句返回。例如:
def my_abs(x): if x >= 0: return x else: return -x
請注意,函數(shù)體內(nèi)部的語句在執(zhí)行時,一旦執(zhí)行到return時,函數(shù)就執(zhí)行完畢,并將結(jié)果返回。如果沒有return
語句,函數(shù)執(zhí)行完畢后也會返回結(jié)果,只是結(jié)果為 None。
3 返回多值
函數(shù)可以返回多個值。需要注意的是,Python的函數(shù)返回多值其實就是返回一個tuple。
4 遞歸函數(shù)
在函數(shù)內(nèi)部,可以調(diào)用其他函數(shù)。如果一個函數(shù)在內(nèi)部調(diào)用自身本身,這個函數(shù)就是遞歸函數(shù)。例如:
def fact(n): if n==1: return 1 return n * fact(n - 1)
這個函數(shù)其實就是計算n!。
遞歸函數(shù)的優(yōu)點是定義簡單,邏輯清晰。理論上,所有的遞歸函數(shù)都可以寫成循環(huán)的方式,但循環(huán)的邏輯不如遞
歸清晰。使用遞歸函數(shù)需要注意防止棧溢出。在計算機中,函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的,每當(dāng)
進入一個函數(shù)調(diào)用,棧就會加一層棧幀,每當(dāng)函數(shù)返回,棧就會減一層棧幀。由于棧的大小不是無限的,所以,遞歸
調(diào)用的次數(shù)過多,會導(dǎo)致棧溢出。可以試試計算 fact(10000)。
5 定義默認(rèn)參數(shù)
函數(shù)的默認(rèn)參數(shù)的作用是簡化調(diào)用,你只需要把必須的參數(shù)傳進去。但是在需要的時候,又可以傳入額外的參數(shù)
來覆蓋默認(rèn)參數(shù)值。我們來定義一個計算 x 的N次方的函數(shù):
def power(x, n): s = 1 while n > 0: n = n - 1 s = s * x return s
假設(shè)計算平方的次數(shù)最多,我們就可以把 n 的默認(rèn)值設(shè)定為 2:
def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s
這樣一來,計算平方就不需要傳入兩個參數(shù)了:
>>> power(5)25
由于函數(shù)的參數(shù)按從左到右的順序匹配,所以默認(rèn)參數(shù)只能定義在必需參數(shù)的后面。
6 定義可變參數(shù)
如果想讓一個函數(shù)能接受任意個參數(shù),我們就可以定義一個可變參數(shù):
def fn(*args): PRint args
可變參數(shù)的名字前面有個 * 號,我們可以傳入0個、1個或多個參數(shù)給可變參數(shù):
>>> fn()()>>> fn('a')('a',)>>> fn('a', 'b')('a', 'b')>>> fn('a', 'b', 'c')('a', 'b', 'c')
定義可變參數(shù)的目的也是為了簡化調(diào)用。
新聞熱點
疑難解答