美文网首页
Python函数修饰器之二

Python函数修饰器之二

作者: louyang | 来源:发表于2019-02-28 15:57 被阅读0次
def calc_square(numbers):
    result = []
    for number in numbers:
        result.append(number*number)
    return result

def calc_cube(numbers):
    result = []
    for number in numbers:
        result.append(number*number*number)
    return result

array = range(1,100000)
out_square = calc_square(array)
out_cube = calc_cube(array)

当我们面对上面这样的python程序,计算平方和立方各10万次。有的时候我们会希望测量这样的函数运行的时间。

我们可以这样:

import time

def calc_square(numbers):
    start = time.time()
    result = []
    for number in numbers:
        result.append(number*number)
    end = time.time()
    print("calc_square took " + str(end-start) + " sec")
    return result

def calc_cube(numbers):
    start = time.time()
    result = []
    for number in numbers:
        result.append(number*number*number)
    end = time.time()
    print("calc_cube took " + str(end-start) + " sec")
    return result

array = range(1,100000)
out_square = calc_square(array)
out_cube = calc_cube(array)

但是,当有更多函数需要加start/end的时候,我们就很难做了。一是代码尺寸大,修改的地方多;二是原有的代码被切割的支离破碎。

用函数修饰器可以解决这个问题,所谓修饰器就是在不改变原有函数的基础上,增加新功能。

import time

def time_it(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(func.__name__ + " took " + str(end-start) + " sec")
        return result
    
    return wrapper

@time_it
def calc_square(numbers):
    result = []
    for number in numbers:
        result.append(number*number)
    return result

@time_it
def calc_cube(numbers):
    result = []
    for number in numbers:
        result.append(number*number*number)
    end = time.time()

array = range(1,100000)
out_square = calc_square(array)
out_cube = calc_cube(array)

运行结果:

$ python a.py
calc_square took 0.0116701126099 sec
calc_cube took 0.0140378475189 sec
参考

https://www.youtube.com/watch?v=nYDKH9fvlBY

相关文章

  • Python函数修饰器之二

    当我们面对上面这样的python程序,计算平方和立方各10万次。有的时候我们会希望测量这样的函数运行的时间。 我们...

  • Python函数修饰器

    假设我们写一个小函数,打印当前的时间和一个随机整数,代码如下: 运行的结果是: 假设,我们想周期性的打印随机数,而...

  • Python基础手册25——装饰器

    一、装饰器 装饰器背后的主要动机源自 python 面向对象编程。装饰器是在函数调用之上的修饰。这些修饰仅是当声明...

  • Python装饰器高级用法

    转载至:Python装饰器高级用法 在 Python 中, 装饰器 一般用来修饰函数,实现公共功能,达到代码复用的...

  • python进阶—装饰器Decorator

    python装饰器是在函数调用之上的修饰,这些修饰是在声明或者定义一个函数的时候进行设置的。同时,装饰器是一个返回...

  • Lesson 029 —— python 修饰器

    Lesson 029 —— python 修饰器 本质就是函数,功能是为其它函数添加附加功能。 原则: 不修改被修...

  • 【函数学习】修饰符@装饰器与classmethod修饰符

    一、修饰符 python修饰符‘@’引用已有的函数,对下面的函数进行修饰。引用函数必须放在修饰函数的上面,引用函...

  • Python装饰器之函数参数检查

    关于python decorator, 这里就不累述了,推荐左耳朵耗子的博文Python修饰器的函数式编程。下面主...

  • 11.装饰器(注解)、深浅拷贝

    一、装饰器 1). 装饰器概述 装饰器:Python中的代理模式的实现。 对其他函数进行增强。 原则:不修改被修饰...

  • Python装饰器高级用法

    在Python中,装饰器一般用来修饰函数,实现公共功能,达到代码复用的目的。在函数定义前加上@xxxx,然后函数就...

网友评论

      本文标题:Python函数修饰器之二

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