Python如何创建功能装饰器链?有相关实例吗?如何在Python中创建两个装饰器来执行以下操作
@makebold
@makeitalic
def say():
return "Hello"
// 它应该返回:
"<
b><
i>Hello<
/i><
/b>"
我并没有试图在实际应用程序中以这种方式创建HTML—只是试图理解decorator和decorator链接是如何工作的。
【Python如何创建功能装饰器链(有相关实例吗?)】查看文档,了解装饰器是如何工作的,下面是你想要的答案:
from functools import wrapsdef makebold(fn):
@wraps(fn)
def wrapped(*args, **kwargs):
return "<
b>" + fn(*args, **kwargs) + "<
/b>"
return wrappeddef makeitalic(fn):
@wraps(fn)
def wrapped(*args, **kwargs):
return "<
i>" + fn(*args, **kwargs) + "<
/i>"
return wrapped@makebold
@makeitalic
def hello():
return "hello world"@makebold
@makeitalic
def log(s):
return sprint 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>"
推荐阅读
- javascript历史简要——面试必问
- Python中__str__和__repr__有什么区别(分别有什么作用?)
- Python中的元类是什么(如何理解?有什么作用?如何使用元类?)
- Python如何将两个字典合并到一个表达式中(有哪些方式?)
- 如何按照值对Python字典排序(有几种方式和对应的实例?)
- 如何理解Python中if__name__==“__main__”(它是什么意思,有什么用?)
- CD Projekt Red承诺《赛博朋克2077》的发展紧缩不会像《巫师3》那样糟糕
- Blair Witch赶在万圣节前夕获得新的VR体验
- Ubisoft承诺《善与恶2》之外的更新承诺“游戏进展顺利”