Python函数的装饰器,两层装饰器和三层装饰器
生活随笔
收集整理的這篇文章主要介紹了
Python函数的装饰器,两层装饰器和三层装饰器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.裝飾器
1.函數裝飾圈的定義
函數裝飾器:一種裝飾函數的函數
2.個人理解兩層函數裝飾器
兩層函數裝飾器個人覺得他其實就是把需要裝飾的函數名丟入形參,然后用一個嵌套的函數對其頭尾進行添加程序,但是不能減少他的程序內容,他的原來程序不變只能增不能減少,然后返回裝飾好的子函數,再全局定義一個變量名與要裝飾的函數名相同名字,并且將裝飾后的函數調用賦予改變量.
1.簡單的例子(無參函數)
如
#有個函數f1 def f1():print('nick machachong') #我們要對齊裝飾使其輸出打印內容上下都加了'-'線 def f1_deco(f1): #第一步吧變量丟進去def wrapper():#print(50*'-') #我們加的內容#print('nick machachong') #這個等同于f1()#print(50*'-') #我們要加的內容#這是我們需要的打印效果pritn(50*'-')f1()print(50*'-')return wrapper f1 = f1_deco(f1) #前面的f1是變量f1,函數本是f1并未發生變化只是一個變量名接受了f1 f1()?``` -------------------------------------------------- nick machachong -------------------------------------------------- ?``` #另外種寫法 @f1_deco def f1():print('nick machachong') f1() ?``` -------------------------------------------------- nick machachong -------------------------------------------------- ?```2.關于有參函數
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' #如函數 def sum(x,y):print(x+y) #我們要對齊裝飾使其輸出打印內容上下都加了'-'線 def sum_deco(sum):def wrapper(x,y):print("-")sum(x,y)return sum sum() = sum_deco(sum) sum(x,y)#多個值 def sb(x,y,z=2,b=1):print(x,y,z,b) #把他進行封裝 def sb_deco(sb):def wrapper(*args,**kwargs):print('nick machachong')sb(*args,**kwargs)return wrapper sb = sb_deco(sb) sb(1,23,2,3)3.對于有返回值的函數式
#有返回值 def sb(x,y,z=2,b=1):return x,y,z,b #對于返回值乘以3 def sb_deco(sb):def wrapper(*args,**kwargs):res = sb(*args,**kwargs)res = list(res)for a in range(len(res)):res[a] = 3*res[a]res = tuple(res)return resreturn wrapper sb = sb_deco(sb) print(sb(2,3,4,5))4.裝飾圈模板
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def sb(*args,**kwargs):pass #裝飾器模板 def sb_deco(sb):def wrapper(*args,**kwargs):#sb(*args,**kwargs) res = sb(*args,**kwargs) #賦值的時候已經開始調用了所有沒必要在寫一步調用return resreturn wrapper sb = sb_deco(sb) sb(1,23,2,3,12,312,312,3,123)3.對于三層裝飾器理解
#比如說一個函數為,我們對齊裝飾,打印內容前后上下加'-' def sb():print('i am sb')#裝飾 def sb_deco(sb):def wrapper():print('-'*5)sb()print('-'*5)return wrapper #只時候我們加條件要區分是你輸入還是我輸入的# 只時候我們加條件要區分是你輸入還是我輸入的, 我那邊聰明肯定不是SB def sb_deco(sb):def wrapper():if user == 'you':print('-' * 5)sb()print('-' * 5)elif user == 'i':print('-' * 5)sb()print('這是不可能的')print('-' * 5)return wrapper #這時候我們導入的參數多了個user def user(user):def sb_deco(sb):def wrapper():if user == 'you':print('-' * 5)sb()print('-' * 5)elif user == 'i':print('-' * 5)sb()print('這是不可能的')print('-' * 5)return wrapperreturn sb_deco@user('you') #其中@user('you') 相當于a =user('you') sb = a(sb) def sb(): print('i am sb') sb() #他是對于輸入的值的一層裝飾,判斷他是拿來的總結
以上是生活随笔為你收集整理的Python函数的装饰器,两层装饰器和三层装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 基础中20 个小技巧
- 下一篇: Python 文件的详细操作