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

2020-01-29  本文已影响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()函数内,首先打印日志,再紧接着调用原始函数。

上一篇 下一篇

猜你喜欢

热点阅读