日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python函数的装饰器,两层装饰器和三层装饰器

發布時間:2025/3/20 python 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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函数的装饰器,两层装饰器和三层装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。