標籤:傳值 傳回值 for war code bsp pip ddd 參數
函數知識回顧:
函數的參數分為:實參和形參。
實參:調用函數的時候傳入的參數;
形參:分為3種(位置參數、預設參數、動態傳參)
位置參數:必須傳值
def aaa(a,b): print(a,b)aaa(1,2)
預設參數:不是必須傳參數
def bbb(x=10): print(x)# bbb() #x = 10# bbb(20) #x = 20
動態傳參
def ccc(*args):#1,2,3,4,5 print(args)ccc(1,2,3,4,5)#按位置傳參數t = (1,2,3,4,5)ccc(t) ((1, 2, 3, 4, 5),)ccc(*t) (1, 2, 3, 4, 5)
def ddd(**kwargs): print(kwargs)# ddd(k = ‘a‘,j = ‘b‘)#按關鍵字傳參數
def eee(*args,**kwargs): print(args,kwargs)# eee(12,123) #先按位置傳參,再按關鍵字傳參
def ccc(*args): print(‘ccc:‘,args) #(1,2,3,4,5)彙總 def inner(a,b,c,d,e): print(‘inner‘,a,b,c,d,e) inner(*args) #*(1,2,3,4,5) 打散
裝飾器(完整解釋版)
def wrapper(func): def inner(*args,**kwargs):#定義函數的時候——*參數的彙總 ret = func(*args,**kwargs) #調用函數的時候——*參數的打散 #func是被裝飾的函數,ret是被裝飾函數的傳回值 return ret #把被裝飾的函數的傳回值返回給調用者 return inner@wrapper #hahaha = wrapper(hahaha)def hahaha(a,b): return a+1,b+1ret = hahaha(1,2)print(ret)
裝飾器的進階應用程式:一個裝飾器被幾個函數調用和一個裝飾器被調用的次數、一個函數被多個裝飾器裝飾、帶參數的裝飾器。
一個裝飾器被幾個函數調用:
l=[]#存放調用的函數def wrapper(func): l.append(func)#統計有幾個函數調用 def inner(*args,**kwargs): ret=func(*args,**kwargs) return ret return inner@wrapperdef f1(): print(‘in f1‘)@wrapperdef f2(): print(‘in f2‘)print(l)
一個裝飾器被調用的次數:
l=[]#存放調用的函數def wrapper(func): # l.append(func)#統計有幾個函數調用 def inner(*args,**kwargs): l.append(func)#統計被調用了幾次 ret=func(*args,**kwargs) return ret return inner@wrapperdef f1(): print(‘in f1‘)@wrapperdef f2(): print(‘in f2‘)f1()f1()f2()f2()print(l)
一個函數被幾個裝飾器裝飾:
def qqxing(func): def inner(*args,**kwargs): print(‘before,inqqxing‘) ret= func(*args,**kwargs) print(‘inqqxing,after‘) return ret return innerdef pipia(func): def inner(*args,**kwargs): print(‘beore,pipia‘) ret=func(*args,**kwargs) print(‘after ,pipia‘ ) return ret return inner@qqxing@pipiadef dapangxie(): print(‘餓了麼‘)dapangxie()
放大招帶參數的裝飾器:
F=True#裝飾器的參數def outer(flag):#定義 def wrapper (func): def inner(*args,**kwargs): if flag: print(‘before‘) ret=func(*args,**kwargs) print(‘after‘) else: ret = func(*args, **kwargs) return ret return inner return wrapper@outer(F)def hahaha(): print(‘hahaha‘)@outer(F)def shuang(): print(‘shuag‘)shuang()hahaha()
Python學習之裝飾器進階