標籤:代碼 具名引數 number 可變參數 lang print 分享 重用 表達
函數介紹
如果在開發程式時,需要某塊代碼多次,但是為了提高編寫的效率以及代碼的重用,所以把具有獨立功能的代碼塊組織為一個小模組,這就是函數
函數定義和調用
定義函數的格式如下:
def 函數名(): 代碼
demo:
# 定義一個函數,能夠完成列印資訊的功能 def printInfo(): print ‘------------------------------------‘ print ‘ 生命苦短,我用Python‘ print ‘-------------------
函數參數<1> 定義帶有參數的函數
樣本如下:
def add2num(a, b): c = a+b print c
<2> 調用帶有參數的函數
以調用上面的add2num(a, b)函數為例:
def add2num(a, b): c = a+b print c add2num(11, 22) #調用帶有參數的函數時,需要在小括弧中,傳遞資料
調用帶有參數函數的運行過程:
<3>. 預設參數
調用函數時,預設參數的值如果沒有傳入,則被認為是預設值。下例會列印預設的age,如果age沒有被傳入:
def printinfo( name, age = 35 ):
# 列印任何傳入的字串
print ("Name:", name)
print ("Age", age)
# 調用printinfo函數
printinfo(name="miki" )
printinfo( age=9,name="miki" )
以上執行個體輸出結果:
Name: mikiAge 35Name: mikiAge 9
注意:帶有預設值的參數一定要位於參數列表的最後面。
<4>.不定長參數
有時可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數,聲明時不會命名。
基本文法如下:
def functionname([formal_args,] *args, **kwargs): "函數_文檔字串" function_suite return [expression]
加了星號(*)的變數args會存放所有未命名的變數參數,args為元組;而加**的變數kwargs會存放具名引數,即形如key=value的參數, kwargs為字典。
def fun(a, b, *args, **kwargs): """可變參數示範樣本""" print ("a =", a) print ("b =", b) print ("args =", args) print ("kwargs: ") for key, value in kwargs.items(): print (key, "=", value)fun(1, 2, 3, 4, 5, m=6, n=7, p=8) # 注意傳遞的參數對應
遞迴函式
如果一個函數在內部不調用其它的函數,而是自己本身的話,這個函數就是遞迴函式。
舉個例子,我們來計算階乘 n! = 1 * 2 * 3 * ... * n
解決辦法1:
看階乘的規律
1! = 12! = 2 × 1 = 2 × 1!3! = 3 × 2 × 1 = 3 × 2!4! = 4 × 3 × 2 × 1 = 4 × 3!...n! = n × (n-1)!
解決辦法2:
原理:
匿名函數
用lambda關鍵詞能建立小型匿名函數。這種函數得名於省略了用def聲明函數的標準步驟。
lambda函數的文法只包含一個語句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
如下執行個體:
sum = lambda arg1, arg2: arg1 + arg2 #調用sum函數 print "Value of total : ", sum( 10, 20 ) print "Value of total : ", sum( 20, 20 )
以上執行個體輸出結果:
Value of total : 30 Value of total : 40
Lambda函數能接收任何數量的參數但只能返回一個運算式的值
匿名函數不能直接調用print,因為lambda需要一個運算式
python基礎-函數