Python_函数式编程_高阶函数_装饰器

装饰器

设计模式中有一种设计模式动态地将责任附加到对象身上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

而在 Python 中为我们提供更好是的实现方式,那就是装饰器,使用装饰器我们可以很快的实现:

我们先实现一个装饰器:

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

在定义一个函数:

@log
def now():
    print('2015-3-25')

输出:

>>> now()
call now():
2015-3-25

把@log放到now()函数的定义处,相当于执行了语句:

now = log(now)

由于log()是一个decorator,返回一个函数,所以,原来的now()函数仍然存在,只是现在同名的now变量指向了新的函数,于是调用now()将执行新函数,即在log()函数中返回的wrapper()函数。

wrapper()函数的参数定义是(*args, **kw),因此,wrapper()函数可以接受任意参数的调用。在wrapper()函数内,首先打印日志,再紧接着调用原始函数。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 部分细节自己改了点,也加了点自己例子,基本上属于转载。转载出处:https://my.oschina.net/le...
    洛克黄瓜阅读 2,163评论 0赞 3
  • 文章来源 基本是拷贝的内容,目的是为了将知识点整理在一起。除了一个小结(装饰器部分)提供了我自己的解法,其余基本没...
    王诗翔阅读 744评论 0赞 1
  • 直接上正文 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂...
    OzanShareing阅读 642评论 0赞 0
  • 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确...
    齐天大圣李圣杰阅读 1,690评论 0赞 2
  • 1.当我死去的那一天,不要难过,无需悲伤。我会化作星辰,给予世界柔和的光。 ...
    单眼皮爱眯眼笑阅读 245评论 0赞 0

友情链接更多精彩内容