python装饰器两层和三层区别_学习python的第十五天(函数的装饰器,两层装饰器和三层装饰器)...
06.01自我總結
一.裝飾器
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.關于有參函數
#如函數
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 res
return wrapper
sb = sb_deco(sb)
print(sb(2,3,4,5))
4.裝飾圈模板
def sb(*args,**kwargs):
pass
#裝飾器模板
def sb_deco(sb):
def wrapper(*args,**kwargs):
#sb(*args,**kwargs)
res = sb(*args,**kwargs) #賦值的時候已經開始調用了所有沒必要在寫一步調用
return res
return 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 wrapper
return sb_deco
@user('you') #其中@user('you') 相當于a =user('you') sb = a(sb)
def sb():
print('i am sb')
sb()
#他是對于輸入的值的一層裝飾,判斷他是拿來的
`
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的python装饰器两层和三层区别_学习python的第十五天(函数的装饰器,两层装饰器和三层装饰器)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 游戏脚本 vbs_用VBS
- 下一篇: python识别验证码ocr_Pytho