python日志裝飾器實現


問題出自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000#0

再思考一下能否寫出一個@log的decorator,使它既支持:

@log
def f():
    pass
又支持:

@log('execute')
def f():
    pass

  

貼上我的實現代碼:

import functools


def log(param):
if callable(param):
def wrapper(*args, **kw):
print('%s function()' % (param.__name__,))
param(*args, **kw)

return wrapper

def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s():' % (param, func.__name__))
return func(*args, **kw)

return wrapper

return decorator


@log
def now():
print("2018")


@log("測試")
def now2():
print("2018")


now()
now2()

輸出:
now function()
2018
測試 now2():
2018

  

親測可行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM