当前位置: 首页 > 面试题库 >

如何制作功能装饰器并将它们链接在一起?

郭通
2023-03-14
问题内容

如何在Python中制作两个装饰器,以完成以下工作?

@makebold
@makeitalic
def say():
   return "Hello"

…应返回:

"<b><i>Hello</i></b>"

我并不是想HTML在实际的应用程序中采用这种方式-只是想了解装饰器和装饰器链接的工作方式。


问题答案:

查看文档,以了解装饰器如何工作。这是您要求的:

from functools import wraps

def makebold(fn):
    @wraps(fn)
    def wrapped(*args, **kwargs):
        return "<b>" + fn(*args, **kwargs) + "</b>"
    return wrapped

def 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 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>"


 类似资料:
  • 问题内容: 如何在Python中制作两个装饰器,以完成以下工作? …应返回: 我并不是想在实际的应用程序中采用这种方式-只是想了解装饰器和装饰器链接是如何工作的。 问题答案: 查看文档,以了解装饰器如何工作。

  • 问题内容: 这是一个程序,可将数据从T恤衫网站上抓取,然后将产品信息写入CSV文件。 有3个刮擦功能和1个写入功能。 现在,我正面临一场绝对的噩梦,试图在没有任何第三方库或软件包的情况下实现如何在这里实现承诺。仅凭ES6的本机功能可以做到吗? 由于请求的异步性质,我需要每个函数及其请求在调用下一个函数之前完全完成。这样,我就可以使用下一个函数中的变量。 我怎么能简单地做到这一点而无需重写我的整个代

  • 问题内容: 目前正在做一些考试,我正在努力学习一些概念。我的笔记中确实“提到”了所有这些内容,但我并不真正了解它们如何相互联系。据我了解: SOA-使服务使用者/提供者进行通信的解决方案。(据我了解,这是所有其他内容的总称) WSDL-一种描述提供程序服务的语言。 SOAP-服务用来发送消息的XML协议“包装器”。与WSDL协同工作以提供参数? REST-一种功能类似于SOAP但避免使用XML的设

  • 问题内容: 装饰器模式(功能)有很多好处: 当一个方法具有许多正交的关注点时,这将非常有用…也就是说,这些关注点均不相关,除了我们每次调用我们的方法时都希望全部(或部分)关注它们。这是装饰器模式真正有用的地方。 通过实现装饰器模式,我们订阅了开闭主体。我们的方法对将来的扩展开放,但对将来的修改不开放。遵循开放-封闭原则有很多有趣的好处。 但是,我发现的所有示例都非常复杂(例如,编写带有许多中间件的

  • 目前正在做一些考试,我正在努力学习一些概念。这些都在我的笔记中提到过,但我并不真正理解它们是如何联系在一起的。就我的理解是: SOA-一种使服务使用者/提供者进行交流的解决方案。(据我所知,这是所有其他事物的总称) WSDL-描述提供者服务的语言。 SOAP-服务用来发送消息的XML协议“包装器”。与WSDL as协同工作以提供参数? REST-一种在功能上类似于SOAP但避免XML的设计模式?(

  • 我很好奇AngularJS中的装饰师到底是什么。除了AngularJS文档中的一个简介和youtube视频中的一个简短(尽管很有趣)提及之外,对于装饰师来说,网上没有太多信息。 正如棱角分明的人所说,装饰师是: 服务的装饰,允许装饰者拦截服务实例的创建。返回的实例可以是原始实例,也可以是委托给原始实例的新实例。 我真的不知道这意味着什么,我也不知道你为什么要把这个逻辑从服务本身中分离出来。例如,如