標籤:

黃哥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 |