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

歡迎訪問 生活随笔!

生活随笔

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

python

Python学习之路——装饰器

發布時間:2023/12/20 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python学习之路——装饰器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開放封閉原則:不改變調用方式與源代碼上增加功能

''' 1.不能修改被裝飾對象(函數)的源代碼(封閉) 2.不能更改被修飾對象(函數)的調用方式,且能達到增加功能的效果(開放) ''' View Code

裝飾器

# 把要被裝飾的函數作為外層函數的參數通過閉包操作后返回一個替代版函數 # 被裝飾的函數:fn # 外層函數:outer(func) outer(fn) => func = fn # 替代版函數: return inner: 原功能+新功能def fn():print("原有功能")# 裝飾器 def outer(tag):def inner():tag()print(新增功能")return inner fn = outer(fn) fn()

語法糖@外層函數

def outer(f):def inner():f()print("新增功能1")return innerdef wrap(f):def inner():f()print("新增功能2")return inner @wrap # 被裝飾的順序決定了新增功能的執行順序 @outer # <==> fn = outer(fn): inner def fn():print("原有功能") View Code

有參有返的函數被裝飾

def check_usr(fn): # fn, login, inner:不同狀態下的login,所以參數是統一的def inner(usr, pwd):# 在原功能上添加新功能if not (len(usr) >= 3 and usr.isalpha()):print('賬號驗證失敗')return False# 原有功能result = fn(usr, pwd)# 在原功能下添加新功能# ...return resultreturn inner@check_usr def login(usr, pwd):if usr == 'abc' and pwd =='123qwe':print('登錄成功')return Trueprint('登錄失敗')return False# 總結: # 1.login有參數,所以inner與fn都有相同參數 # 2.login有返回值,所以inner與fn都有返回值""" inner(usr, pwd):res = fn(usr, pwd) # 原login的返回值return reslogin = check_usr(login) = innerres = login('abc', '123qwe') # inner的返回值 """

裝飾器最終寫法

def wrap(fn):def inner(*args, **kwargs):print('前增功能')result = fn(*args, **kwargs)print('后增功能')return resultreturn inner@wrap def fn1():print('fn1的原有功能') @wrap def fn2(a, b):print('fn2的原有功能') @wrap def fn3():print('fn3的原有功能')return True @wrap def fn4(a, *, x):print('fn4的原有功能')return Truefn1() fn2(10, 20) fn3() fn4(10, x=20)

?

轉載于:https://www.cnblogs.com/king-home/p/10679729.html

總結

以上是生活随笔為你收集整理的Python学习之路——装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。

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