jiangjing

4.装饰器

1.三个功能函数  f1,f2,f3

# -*- coding: utf-8 -*-
#__author:jiangjing
#date:2018/1/5
import time

def f1():
    for i in range(100):
        print(i)

def f2():
    for i in range(1000):
        print(i)

def f3():
    for i in range(10000):
        print(i)

2.项目遇到性能瓶颈,需要统计各个函数执行的时间

第一种解决方案(红色部分为新加代码):

# -*- coding: utf-8 -*-
#__author:jiangjing
#date:2018/1/5
import time

def f1():
    start_time = time.time()
    for i in range(100):
        print(i)
    end_time = time.time()
    print(end_time - start_time)

def f2():
    start_time = time.time()
    for i in range(1000):
        print(i)
    end_time = time.time()
    print(end_time - start_time)

def f3():
    start_time = time.time()
    for i in range(10000):
        print(i)
    end_time = time.time()
    print(end_time - start_time)

分析:为了统计各个函数执行的时间,修改了函数原有的代码,违反了代码设计的开放-封闭原则(对扩展开放,对修改关闭)

3.使用装饰器进行改进(红色部分为新加代码):

# -*- coding: utf-8 -*-
#__author:jiangjing
#date:2018/1/5
import time

def cal_consume_time(func):
    def wrapper():
        start_time = time.time()
        func()
        end_time = time.time()
        print(end_time - start_time)
    return wrapper

@cal_consume_time
def f1():
    for i in range(100):
        print(i)

@cal_consume_time
def f2():
    for i in range(1000):
        print(i)

@cal_consume_time
def f3():
    for i in range(10000):
        print(i)

分析:使用装饰器之后符合开放-关闭原则

(1)装饰器是以闭包为基础的(闭包在上一篇有介绍);

(2)f1函数的 @cal_consume_time 这个语法糖等价于:f1 = cal_consume_time(f1)

(3)装饰带参数的函数

# -*- coding: utf-8 -*-
#__author:jiangjing
#date:2018/1/5
import time

def cal_consume_time(func):
    def wrapper(*args):
        start_time = time.time()
        func(args)
        end_time = time.time()
        print(end_time - start_time)
    return wrapper

@cal_consume_time
def f1(*args):
    for i in range(100):
        print(i)
    print(args)

 

posted on 2018-01-29 17:59 ~生如夏花 阅读(...) 评论(...) 编辑 收藏

分类:

python

技术点:

相关文章:

  • 2022-02-05
  • 2021-08-27
  • 2021-11-15
  • 2022-12-23
  • 2021-12-31
  • 2021-09-25
  • 2021-05-29
  • 2022-12-23
猜你喜欢
  • 2021-07-19
  • 2022-02-14
  • 2021-11-13
  • 2022-01-01
  • 2021-07-06
  • 2020-05-11
  • 2021-08-05
相关资源
相似解决方案