day11-装饰器

1.举例讲解

  这里先导入time模块的概念。

import  time
print(time.time()) # 打印距离1970年到现在的秒数
time.sleep(1) # 停留一秒再执行下一句
'''
测试一段代码执行会经过多长时间
'''
import time
def func(): # 被装饰的函数
    time.sleep(0.01) # 由于一个print语句太少,所以这里故意设置一个时间间隔,以达到预期效果。
    print('今天好热')

def timmer(f): # 装饰器函数
    def inner():
        start = time.time()
        f() # 调用被装饰的函数
        end = time.time()
        print('时间间隔为:',end - start)
    return inner

result = timmer(func)
result()

  上面一段代码就是一个简单的装饰器。

  通常为了是代码更加优美,于是引入语法糖的概念。这里将对上述第二段代码进行改进,他们的作用和结果完全相同。

'''
测试一段代码执行会经过多长时间
'''
import time

def timmer(f): # 装饰器函数
    def inner():
        start = time.time()
        f() # 调用被装饰的函数
        end = time.time()
        print('时间间隔为:',end - start)
    return inner

@timmer #语法糖-@装饰器函数
def func(): # 被装饰的函数
    time.sleep(0.01) # 由于一个print语句太少,所以这里故意设置一个时间间隔,以达到预期效果。
    print('今天好热')

# result = timmer(func) @timeer与此句一个作用相同
func() # 分析一下,此func等价于timmer(func),也就相当于inner。
'''
测试一段代码执行会经过多长时间
'''
# 新增功能-装入带参数函数的装饰器
import time

def timmer(f): # 装饰器函数
    def inner(a):
        start = time.time()
        f(a) # 调用被装饰的函数
        end = time.time()
        print('时间间隔为:',end - start)
    return inner

@timmer #语法糖-@装饰器函数
def func(a): # 被装饰的函数
    time.sleep(0.01) # 由于一个print语句太少,所以这里故意设置一个时间间隔,以达到预期效果。
    print('今天好热',a)

# result = timmer(func) @timeer与此句一个作用相同
func(1) # 分析一下,此func等价于timmer(func),也就相当于inner。
装入带参数函数的装饰器

  上面一段代码是装入一个参数,如果我想在被装饰函数中加入两个参数呢?也许你会说,再加入一个变量,那么三个参数呢?这个时候我们就要用到前面学过的内容:*args。继续,如果我们再加入一个关键字参数呢?同样,我们要用到**kwargs。下面是代码:

'''
测试一段代码执行会经过多长时间
'''
# 新增功能-装入带参数函数的装饰器
import time

def timmer(f): # 装饰器函数
    def inner(*args,**kwargs):
        start = time.time()
        f(*args,**kwargs) # 调用被装饰的函数
        end = time.time()
        print('时间间隔为:',end - start)
    return inner

@timmer #语法糖-@装饰器函数
def func(a,b): # 被装饰的函数
    time.sleep(0.01) # 由于一个print语句太少,所以这里故意设置一个时间间隔,以达到预期效果。
    print('今天好热',a,b)

# result = timmer(func) @timeer与此句一个作用相同
func(1,b = 3) # 分析一下,此func等价于timmer(func),也就相当于inner。

2.装饰器的作用

  (1)不想修改函数的调用方式,但是还想在原来的函数前后添加功能。

  (2)timmer就是一个装饰器函数,只是对一个函数有一些装饰作用。

3.原则-开放封闭原则

  对扩展是开放的。

  对修改是封闭的。

猜你喜欢

转载自www.cnblogs.com/missdx/p/10957056.html