python 裝飾器的使用示例
無參修飾 ,無參數(shù)時不需要調(diào)用
def log1(func):
func()
@log1
def test():
print('test:')
有參修飾
def log2(func):
def inner(*args, **kwargs):
func(*args, **kwargs)
return inner
@log2
def test(num):
print('testlog2:',num,test.__name__)
test(20) #相當于log(test(20))
@wraps可以保證裝飾器修飾的函數(shù)的name的值保持不變
不帶參數(shù)的裝飾器
def log3(func):
@wraps(func)
def inner(*args, **kwargs,):
func(*args, **kwargs)
return inner
@log3
def test(num):
print('testlog3:',num,test.__name__)
test(30) #相當于log(test(30))
帶參數(shù)的裝飾器
def log4(level):
def log(func):
@wraps(func)
def inner(*args, **kwargs,):
if level == "warn":
print("%s is running" % func.__name__)
func(*args, **kwargs)
return inner
return log
@log4(level="warn")
def test(num):
print('testlog4:', num, test.__name__)
test(40)
實現(xiàn)帶參數(shù)和不帶參數(shù)的裝飾器自適應(yīng)
def log(arg):
if callable(arg): # 判斷參入的參數(shù)是否是函數(shù),不帶參數(shù)的裝飾器調(diào)用這個分支
def log3(func):
@wraps(func)
def inner(*args, **kwargs, ):
func(*args, **kwargs)
return inner
return log3
else:
def log4(func):
@wraps(func)
def inner(*args, **kwargs,):
if arg == "warn":
print("%s is running" % func.__name__)
func(*args, **kwargs)
return inner
return log4
@log(arg=None)
def test(num):
print('testlog:', num, test.__name__)
test(0)
返回入?yún)⒊鰠?/strong>
def log5(func):
def inner(*args, **kwargs):
print('入?yún)ⅲ?,func.__name__, args, kwargs)
res =func(*args, **kwargs)
print('出參:',func.__name__, res)
return res
return inner
@log5
def test(num):
print('testlog5:', num, test.__name__)
return num
print(test(50))
類裝飾器
class Loging:
def __init__(self,level):
self.level = level
def __call__(self,func):
@wraps(func)
def inner(*args, **kwargs):
if self.level == "warn":
self.notify(func)
func(*args, **kwargs)
return inner
def notify(self,func):
print ("%s is running" % func.__name__)
@Loging(level="warn")
def test(num):
print('testLoging:', num, test.__name__)
test(0)
以上就是python 裝飾器的使用示例的詳細內(nèi)容,更多關(guān)于python 裝飾器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python transpose()處理高維度數(shù)組的軸變換的實現(xiàn)
本文主要介紹了python transpose()處理高維度數(shù)組的軸變換的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-09-09
使用python腳本實現(xiàn)Redis未授權(quán)訪問檢測
Redis未授權(quán)訪問漏洞是一種安全漏洞,可能導致未經(jīng)授權(quán)的用戶或攻擊者訪問Redis數(shù)據(jù)庫,甚至修改或刪除其中的數(shù)據(jù),這種漏洞通常發(fā)生在管理員未正確配置Redis實例的訪問控制和認證機制時,本文介紹了python腳本實現(xiàn)Redis未授權(quán)訪問漏洞利用,需要的朋友可以參考下2024-10-10
Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能示例【基于socket套接字】
這篇文章主要介紹了Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能,結(jié)合實例形式分析了Python使用socket套接字實現(xiàn)基于UDP協(xié)議的數(shù)據(jù)發(fā)送端與接收端相關(guān)操作技巧,需要的朋友可以參考下2019-10-10
Python Pytest裝飾器@pytest.mark.parametrize詳解
本文主要介紹了Python Pytest裝飾器@pytest.mark.parametrize詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
Python使用Virtualenv進行虛擬環(huán)境管理的詳細步驟
Virtualenv是一個Python環(huán)境管理工具,它允許開發(fā)者在不同的項目之間獨立創(chuàng)建和管理各自的Python環(huán)境,通過virtualenv,你可以為每個項目安裝特定版本的Python解釋器以及項目的依賴庫,本文給大家介紹了Python使用Virtualenv進行虛擬環(huán)境管理的詳細步驟2024-09-09

