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

歡迎訪問 生活随笔!

生活随笔

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

python

Python笔记-函数装饰器

發布時間:2025/3/15 python 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python笔记-函数装饰器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在調用某個方法前,想調用一些額外的東西。

個人感覺就和C++里面,帶一個函數指針的的參數,在某個函數執行前,調用這個函數指針,或者,在某個函數中,直接調用這個函數。比如插入日志等。功能。

?

但在python可以使用@標識符,進行函數裝飾器

這個和java反射有異曲同工之妙(應該說注解,但注解的本質就是反射)

如下python

def bar1():print("[debug] bar1 is running")print("i am bar1")def bar2():print("[debug] bar2 is running")print("i am bar2")if __name__ == "__main__":bar1()bar2()

程序運行截圖如下:

開始用了,最原始的方式

def use_logging(func_name):#print("[debug]" + func_name + "is running")print("[debug] %s is running" % func_name)def bar1():use_logging("bar1")print("i am bar1")def bar2():use_logging("bar2")print("i am bar2")if __name__ == "__main__":bar1()bar2() 這里就是在函數里面調用其他函數, 下面是使用古老裝飾器模式方式:

使用裝飾器,這個是古老的方式,用C/C++來理解就是func是一個函數指針,use_logging函數把func的名字打印后,把指針返回來,然后給bar1,bar1再調用,即可

def use_logging(func):def wrapper(*args, **kwargs):print("[debug] %s is running" % func.__name__)return func(*args, **kwargs)return wrapperdef bar1():print("i am bar1")def bar2():print("i am bar2")if __name__ == "__main__":bar11 = use_logging(bar1)bar11()bar22 = use_logging(bar2)bar22()

程序運行截圖如下:

下面是新時代寫法,和Java注解差不多,從這里可以看到Java和Python寫代碼,的確比C/C++爽。

def use_logging(func):def wrapper(*args, **kwargs):print("[debug] %s is running" % func.__name__)return func(*args, **kwargs)return wrapper@use_logging def bar1():print("i am bar1")@use_logging def bar2():print("i am bar2")if __name__ == "__main__":bar1()bar2()

程序運行截圖如下:

下面是帶參數的函數裝飾器

def use_logging(level = "debug"):def decorator(func):def wrapper(*args, **kwargs):print("[%s] %s is running" % (level, func.__name__))return func(*args, **kwargs)return wrapperreturn decorator@use_logging() def bar1():print("i am bar1")@use_logging(level = "error") def bar2():print("i am bar2")if __name__ == "__main__":bar1()bar2()

程序運行截圖如下:

?

總結

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

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