一、 定義函數 定義一個函數要使用def語句,依次寫出函數名、括弧、括弧中的參數和冒號:,然後,在縮進塊中編寫函數體,函數的返回值用return語句返回。如果沒有return語句,函數執行完畢後也會返回結果,只是結果為None。。 定義空函數可以用pass 定義函數時,需要確定函數名和參數個數; 如 ...
一、 定義函數
定義一個函數要使用def
語句,依次寫出函數名、括弧、括弧中的參數和冒號
:
,然後,在縮進塊中編寫函數體,函數的返回值用return
語句返回。如果沒有return
語句,函數執行完畢後也會返回結果,只是結果為None
。。
def add(a,b): return a+b print add(1,2)
定義空函數可以用pass
def nop(): pass
定義函數時,需要確定函數名和參數個數;
如果有必要,可以先對參數的數據類型做檢查,數據類型檢查可以用內置函數isinstance
實現.
二、函數返回值
函數體內部可以用return
隨時返回函數結果;
函數執行完畢也沒有return
語句時,自動return None
。
函數可以同時返回多個值,實質上就是一個tuple。
def test(a,b,rank): c=a+rank d=b+rank return c,d c,d=test(2,3,5) print c print d t=test(5,10,1) print t
三、函數參數
①預設參數
def power(x,n=2): r=1 while(n>0): r=r*x n=n-1 return r print power(2) >>4 print power(2,10) >>1024
設置預設參數時,有幾點要註意:
一是必選參數在前,預設參數在後;
二是預設參數必須指向不變對象。
②可變參數
可變參數允許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝為一個tuple。定義可變參數時,需要在變數名前加星號*。
def sum(*numbers): s=0 for x in numbers: s=s+x*x return s print sum(1,2,3,4,5) >>>55
如果參數是list或者turple時,需要調用時在變數名前加星號。
list=[1,2,3,4,5] print sum(*list)>>>55 t=(1,2,3,4,5) print sum(*t)>>>55
③關鍵字參數
關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict。
def show(name,age,**param): print "name",name,"age",age,param show('liu',20,city='beijing',job='teacher') dic={'city':'beijing','job':'teacher','home':'hubei'} show('zhang',30,**dic)
註意,參數定義的順序必須是:必選參數、預設參數、可變參數和關鍵字參數。
④總結
預設參數一定要用不可變對象,如果是可變對象,運行會有邏輯錯誤!
要註意定義可變參數和關鍵字參數的語法:
*args
是可變參數,args接收的是一個tuple;**kw
是關鍵字參數,kw接收的是一個dict。
調用函數時如何傳入可變參數和關鍵字參數的語法:
可變參數既可以直接傳入:func(1, 2, 3)
,又可以先組裝list或tuple,再通過*args
傳入:func(*(1, 2, 3))
;
關鍵字參數既可以直接傳入:func(a=1, b=2)
,又可以先組裝dict,再通過**kw
傳入:func(**{'a': 1, 'b': 2})
。
四、匿名函數
python中使用lambda關鍵字定義匿名函數的.
例如:將字元串集合元素按照長度進行排序.
s=['hello','World','aa'] s.sort(key=lambda x:len(x)) print s 運行結果:['aa', 'hello', 'World']
五、函數柯里化
函數柯里化就是固定函數的幾個參數,從而泛化出多個不同意義的函數。這需要用到內置的functools模塊的partial函數。例如:
from functools import partial def addNumber(a,b): return a+b addNumber10=partial(addNumber,10) addNumber20=partial(addNumber,20) print addNumber10(100) #運行結果110 print addNumber20(100)#運行結果120