【相關學習推薦:#python教學】
裝飾器
- 本質上是一個接受參數為函數的函數。
- 作用:為一個已經實現的方法增加額外的通用功能,例如日誌記錄、執行計時等。
範例
不帶參數的裝飾器,不用@
# 不带参数的装饰器def deco_test(func): def wrapper(*args, **kwargs): print("before function") f = func(*args, **kwargs) print("after function") return f return wrapperdef do_something(a,b,c): print(a) time.sleep(1) print(b) time.sleep(1) print(c) return aif __name__ == '__main__': # 不用@ f = deco_test(do_something)("1","2","3")
輸出:
before function 1 2 3 after function
個人理解:
相當於在do_something
函數外面套了兩個輸出:before function
和after function
。
不帶參數的裝飾器,用@
# 不带参数的装饰器def deco_test(func): def wrapper(*args, **kwargs): print("before function") f = func(*args, **kwargs) print("after function") return f return wrapper @deco_testdef do_something(a,b,c): print(a) time.sleep(1) print(b) time.sleep(1) print(c) return aif __name__ == '__main__': # 使用@ f = do_something("1","2","3")
輸出:
before function 1 2 3 after function
個人理解:
##相當於執行do_something 函數的時候,因為有
@ 的原因,已經知道有一層裝飾器
deco_test,所以不需要再單獨寫
deco_test(do_something) 了。
# 带参数的装饰器def logging(level):
def wrapper(func):
def inner_wrapper(*args, **kwargs):
print("[{level}]: enter function {func}()".format(level=level, func=func.__name__))
f = func(*args, **kwargs)
print("after function: [{level}]: enter function {func}()".format(level=level, func=func.__name__))
return f return inner_wrapper return wrapper
@logging(level="debug")def do_something(a,b,c):
print(a)
time.sleep(1)
print(b)
time.sleep(1)
print(c)
return aif __name__ == '__main__':
# 使用@
f = do_something("1","2","3")
#輸出:
[debug]: enter function do_something() 1 2 3 after function: [debug]: enter function do_something()
個人理解:
裝飾器帶了一個參數level = "debug"。
logging() 接受參數並將它們作用在內部的裝飾器函數上面。內層的函數
wrapper() 接受一個函數作為參數,然後在函數上面放置一個裝飾器。這裡的關鍵點是裝飾器是可以使用傳遞給
logging() 的參數的。
# 类装饰器class deco_cls(object):
def __init__(self, func):
self._func = func def __call__(self, *args, **kwargs):
print("class decorator before function")
f = self._func(*args, **kwargs)
print("class decorator after function")
return f
@deco_clsdef do_something(a,b,c):
print(a)
time.sleep(1)
print(b)
time.sleep(1)
print(c)
return aif __name__ == '__main__':
# 使用@
f = do_something("1","2","3")
輸出:
class decorator before function 1 2 3 class decorator after function
個人理解:
使用一個裝飾器去包裝函數,傳回一個可呼叫的實例。因此定義了一個類別裝飾器。 兩層裝飾器# 不带参数的装饰器def deco_test(func):
def wrapper(*args, **kwargs):
print("before function")
f = func(*args, **kwargs)
print("after function")
return f return wrapper# 带参数的装饰器def logging(level):
def wrapper(func):
def inner_wrapper(*args, **kwargs):
print("[{level}]: enter function {func}()".format(level=level, func=func.__name__))
f = func(*args, **kwargs)
print("after function: [{level}]: enter function {func}()".format(level=level, func=func.__name__))
return f return inner_wrapper return wrapper
@logging(level="debug")@deco_testdef do_something(a,b,c):
print(a)
time.sleep(1)
print(b)
time.sleep(1)
print(c)
return aif __name__ == '__main__':
# 使用@
f = do_something("1","2","3")
輸出:
[debug]: enter function wrapper() before function 1 2 3 after function after function: [debug]: enter function wrapper()
個人理解:
在函數do_something() 外面先套一層
deco_test() 裝飾器,再在最外面套一層
logging() 裝飾器。
想了解更多程式設計學習,請關注php培訓欄位!
#
以上是聊聊Python裝飾器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver Mac版
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器