如何在 Python 中制作两个可以执行以下操作的装饰器?
@makebold @makeitalic def say(): return "Hello"
…应该返回:
"<b><i>Hello</i></b>"
我不是想HTML在实际应用程序中采用这种方式——只是想了解装饰器和装饰器链接是如何工作的。
HTML
查看文档以了解装饰器是如何工作的。这是您的要求:
from functools import wraps def makebold(fn): @wraps(fn) def wrapper(*args, **kwargs): return "<b>" + fn(*args, **kwargs) + "</b>" return wrapper def makeitalic(fn): @wraps(fn) def wrapper(*args, **kwargs): return "<i>" + fn(*args, **kwargs) + "</i>" return wrapper @makebold @makeitalic def hello(): return "hello world" @makebold @makeitalic def log(s): return s print hello() # returns "<b><i>hello world</i></b>" print hello.__name__ # with functools.wraps() this returns "hello" print log('hello') # returns "<b><i>hello</i></b>"