黃哥Python 幫網友debug裝飾器代碼
有知乎網友提問
用python編寫decorator,使其支持@log和@log(text),程序有錯,求指導?
該代碼是錯誤的,黃哥修改如下。
n 黃哥Python培訓 黃哥改寫n Python 3nnnimport functoolsnnndef log(t):nn if isinstance(t, str):n def decorator(fn):n @functools.wraps(fn)n def wrapper(*args, **kw):n print(%s %s() % (t, fn.__name__))n return fn(*args, **kw)n return wrappern return decoratorn else:n @functools.wraps(t)n def wrapper(*args, **kw):n print(%s() is executed % t.__name__)n return t(*args, **kw)n return wrappernnn@logndef foo(x, y):n return x + ynnn@log("hello Python")ndef foo2(x, y):n return x + ynnnif __name__ == __main__:n print(foo(2, 3))n print(foo2(2, 3))n
該代碼有冗餘代碼,完全可以用一個默認參數達到同樣的效果。
請看下面的代碼
n 黃哥Python培訓 黃哥改寫n Python 3nnnimport functoolsnnndef log(t=hello):nn def decorator(fn):n @functools.wraps(fn)n def wrapper(*args, **kw):n if t != hello:n print(%s %s() % (t, fn.__name__))n return fn(*args, **kw)n return wrappern return decoratornnn@log()ndef foo(x, y):n return x + ynnn@log("hello Python")ndef foo2(x, y):n return x + ynnnif __name__ == __main__:n print(foo(2, 3))n print(foo2(2, 3))n
最有價值的是:講編程思路的視頻、作業訓練和答疑服務。
錄製好的50講視頻+作業訓練+qq答疑 效果等於面授。歡迎參加黃哥python遠程視頻培訓,
幫你完成從不會寫代碼到會寫代碼解決問題的過渡。
pythonpeixun/article
諮詢qq:1465376564
部分免費python免費視頻
pythonpeixun/article
推薦閱讀:
※黃哥Python每日新聞(2017-8-24)
※有沒有什麼東西是 Go 可以做但 Python 做不到的?
※Python 黑帽編程大綱(變化中)
※有哪些關於 Python 的技術博客?
TAG:Python |