2.3.12 Python 函数进阶-装饰器

代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)

本质上,decorator就是一个返回函数的高阶函数

所以,我们要定义一个能打印日志的decorator,可以定义如下:

 
 
import time

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

#观察上面的log,因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。我们要借助Python的@语法,把decorator置于函数的定义处:

@log
def now():
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))


now()
 

调用now()函数,不仅会运行now()函数本身,还会在运行now()函数前打印一行日志:

1 call now():
2 2018-08-13 11:08:45

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

1 now = log(now)

猜你喜欢

转载自www.cnblogs.com/devopsxin/p/9466648.html