美文网首页
Python_函数式编程_高阶函数_装饰器

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

作者: 宋木木的征途是星辰大海 | 来源:发表于2020-01-29 17:25 被阅读0次

    装饰器

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

    而在 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()函数内,首先打印日志,再紧接着调用原始函数。

    相关文章

      网友评论

          本文标题:Python_函数式编程_高阶函数_装饰器

          本文链接:https://www.haomeiwen.com/subject/itfbthtx.html