about:函數(shù)
調用函數(shù)
比較函數(shù) cmp(x, y) 就需要兩個參數(shù),如果 x<y劫乱,返回 -1织中,如果 x==y,返回 0衷戈,如果 x>y狭吼,返回 1
Python內置的常用函數(shù)還包括數(shù)據類型轉換函數(shù),比如 int()函數(shù)可以把其他數(shù)據類型轉換為整數(shù)
str()函數(shù)把其他類型轉換成 str:
str(123)
'123'
str(1.23)
'1.23'
編寫函數(shù)
在Python中殖妇,定義一個函數(shù)要使用 def 語句刁笙,依次寫出函數(shù)名、括號谦趣、括號中的參數(shù)和冒號:疲吸,然后,在縮進塊中編寫函數(shù)體前鹅,函數(shù)的返回值用 return 語句返回摘悴。
遞歸函數(shù)
在函數(shù)內部,可以調用其他函數(shù)舰绘。如果一個函數(shù)在內部調用自身本身蹂喻,這個函數(shù)就是遞歸函數(shù)。
舉個例子捂寿,我們來計算階乘 n! = 1 * 2 * 3 * ... * n口四,用函數(shù) fact(n)表示,可以看出:
fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n
所以秦陋,fact(n)可以表示為 n * fact(n-1)蔓彩,只有n=1時需要特殊處理。
于是驳概,fact(n)用遞歸的方式寫出來就是:
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
上面就是一個遞歸函數(shù).
使用遞歸函數(shù)需要注意防止棧溢出粪小。在計算機中,函數(shù)調用是通過棧(stack)這種數(shù)據結構實現(xiàn)的抡句,每當進入一個函數(shù)調用探膊,棧就會加一層棧幀,每當函數(shù)返回待榔,棧就會減一層棧幀逞壁。由于棧的大小不是無限的流济,所以,遞歸調用的次數(shù)過多腌闯,會導致棧溢出绳瘟。可以試試計算 fact(10000)姿骏。
定義默認參數(shù)
函數(shù)的默認參數(shù)的作用是簡化調用糖声,你只需要把必須的參數(shù)傳進去。但是在需要的時候分瘦,又可以傳入額外的參數(shù)來覆蓋默認參數(shù)值蘸泻。
定義可變參數(shù)
如果想讓一個函數(shù)能接受任意個參數(shù),我們就可以定義一個可變參數(shù):
def fn(*args): print args
可變參數(shù)的名字前面有個 * 號嘲玫,我們可以傳入0個悦施、1個或多個參數(shù)給可變參數(shù).
Python解釋器會把傳入的一組參數(shù)組裝成一個tuple傳遞給可變參數(shù),因此去团,在函數(shù)內部抡诞,直接把變量 args 看成一個 tuple 就好了。
定義可變參數(shù)的目的也是為了簡化調用土陪。