【相關學習推薦:#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列表切片的基本語法是list[start:stop:step]。 1.start是包含的第一個元素索引,2.stop是排除的第一個元素索引,3.step決定元素之間的步長。切片不僅用於提取數據,還可以修改和反轉列表。

ListSoutPerformarRaysin:1)DynamicsizicsizingandFrequentInsertions/刪除,2)儲存的二聚體和3)MemoryFeliceFiceForceforseforsparsedata,butmayhaveslightperformancecostsinclentoperations。

toConvertapythonarraytoalist,usEthelist()constructororageneratorexpression.1)intimpthearraymoduleandcreateanArray.2)USELIST(ARR)或[XFORXINARR] to ConconverTittoalist,請考慮performorefformanceandmemoryfformanceandmemoryfformienceforlargedAtasetset。

choosearraysoverlistsinpythonforbetterperformanceandmemoryfliceSpecificScenarios.1)largenumericaldatasets:arraysreducememoryusage.2)績效 - 臨界雜貨:arraysoffersoffersOffersOffersOffersPoostSfoostSforsssfortasssfortaskslikeappensearch orearch.3)testessenforcety:arraysenforce:arraysenforc

在Python中,可以使用for循環、enumerate和列表推導式遍歷列表;在Java中,可以使用傳統for循環和增強for循環遍歷數組。 1.Python列表遍歷方法包括:for循環、enumerate和列表推導式。 2.Java數組遍歷方法包括:傳統for循環和增強for循環。

本文討論了版本3.10中介紹的Python的新“匹配”語句,該語句與其他語言相同。它增強了代碼的可讀性,並為傳統的if-elif-el提供了性能優勢

Python中的功能註釋將元數據添加到函數中,以進行類型檢查,文檔和IDE支持。它們增強了代碼的可讀性,維護,並且在API開發,數據科學和圖書館創建中至關重要。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

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

禪工作室 13.0.1
強大的PHP整合開發環境