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

Python-如何制作一个功能装饰链?

宰父阳焱
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中制作两个装饰器,以完成以下工作? …应返回: 我并不是想HTML在实际的应用程序中采用这种方式-只是想了解装饰器和装饰器链接的工作方式。 问题答案: 查看文档,以了解装饰器如何工作。这是您要求的:

  • 问题内容: 我想了解内置功能的工作原理。令我感到困惑的是,它还可以用作装饰器,但是仅当用作内置函数时才接受参数,而不能用作装饰器。 这个例子来自文档: 的论点是和文档字符串。 在下面的代码中用作装饰器。它的对象是函数,但是在上面的代码中,参数中没有对象函数的位置。 并且,和装饰器是如何创建的?我很困惑。 问题答案: 该函数返回一个特殊的描述符对象: 正是这种对象有额外的方法: 这些充当装饰过。他们

  • 问题内容: 我写了这个简单的函数: 例子: 尽管这对于我来说已经足够清楚,并且适合我的用例(用于简单打印机的简单测试工具),但我不禁认为还有很多改进的余地,并且可以将其简化为非常简洁的内容。 还有什么其他方法可以解决这个问题? 问题答案: 使用新的字符串方法: 说明: 如果您希望字母十六进制数字为大写字母,但前缀为小写字母“ x”,则需要一些解决方法: 从Python 3.6开始,您还可以执行以下

  • 尽管目前房价依旧很高,但还是阻止不了大家对新房的渴望和买房的热情。如果大家买的是毛坯房,无疑还有一项艰巨的任务要面对,那就是装修。对新房进行装修并没有改变房屋用于居住的本质,但它可以让房子变得更漂亮、更温馨、更实用、更能满足居家的需求。在软件设计中,我们也有一种类似新房装修的技术可以对已有对象(新房)的功能进行扩展(装修),以获得更加符合用户需求的对象,使得对象具有更加强大的功能。这种技术对应于一

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

  • 本文向大家介绍python 装饰器功能与用法案例详解,包括了python 装饰器功能与用法案例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python 装饰器功能与用法。分享给大家供大家参考,具体如下: 1、必备 2、需求来了 初创公司有N个业务部门,1个基础平台部门,基础平台负责提供底层的功能,如:数据库操作、redis调用、监控API等功能。业务部门使用基础功能时,只需调用基础