class A():

Python: 使用装饰器“@”取得函数执行时间 - oldJ的学习笔记 - 博客频道 - CSDN.NET

Python: 使用装饰器“@”取得函数执行时间

分类: Python 2009-10-14 12:53 752人阅读 评论(0) 收藏 举报

Python中可以使用装饰器对函数进行装饰(或说包装),利用这个特性,可以很方便、简洁地解决一些问题,比如获得函数执行时间的问题。

首先,我们定义一个函数,如下:

[python] view plaincopyprint?

def exeTime(func): 
        def newFunc(*args, **args2): 
            t0 = time.time() 
            print "@%s, {%s} start" % (time.strftime("%X", time.localtime()), func.__name__) 
            back = func(*args, **args2) 
            print "@%s, {%s} end" % (time.strftime("%X", time.localtime()), func.__name__) 
            print "@%.3fs taken for {%s}" % (time.time() - t0, func.__name__) 
            return back 
        return newFunc

当然,不要忘了“import time”导入time模块。这个函数就可以用作我们计算函数执行时间的修饰器了。

接下来,我们就可以在需要计时的函数前一行引用它作为装饰,比如:

[python] view plaincopyprint?

@exeTime 
    def foo(): 
        for i in xrange(10000000): 
            pass

注意最上方的“@exeTime ”,装饰器的语法以“@”开头,接着是装饰函数,在本例中为“exeTime”。这时,执行函数foo,装饰器就会在控制台打印出这个函数的执行时间了。

完整代码如下:

[python:collapse] + expand sourceview plaincopyprint?

# -*- coding: utf-8 -*- 
    import time 
     
    # --exeTime 
    def exeTime(func): 
        def newFunc(*args, **args2): 
            t0 = time.time() 
            print "@%s, {%s} start" % (time.strftime("%X", time.localtime()), func.__name__) 
            back = func(*args, **args2) 
            print "@%s, {%s} end" % (time.strftime("%X", time.localtime()), func.__name__) 
            print "@%.3fs taken for {%s}" % (time.time() - t0, func.__name__) 
            return back 
        return newFunc 
    # --end of exeTime 
    
    @exeTime 
    def foo(): 
        for i in xrange(10000000): 
            pass 
     
    if __name__ == "__main__": 
        foo()

在笔者电脑上的运行结果为:

@13:12:27, {foo} start
@13:12:27, {foo} end
@0.203s taken for {foo}

当然,上面只是一个很简单的示例,事实上,本例中的装饰器exeTime不仅可以装饰类似上面“foo”这样不带参数的函数,也能装饰带任意参数的函数,甚至还可以装饰类的方法,用法与上面是一样的。

除了计算运行时间外,装饰器还可以有很多用途,比如记录运行日志等,更多的用途等待更多的朋友去发掘。

Python: 使用装饰器“@”取得函数执行时间相关推荐

  1. python装饰器函数-Python精进-装饰器与函数对象

    本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...

  2. python装饰器打印函数执行时间_python装饰器计算函数执行时间

    原博文 2020-04-26 13:47 − import time import logging from functools import wraps import datetime log = ...

  3. python 类装饰器和函数装饰器区别_python进阶之装饰器之4在类中定义装饰器,将装饰器定义为类,两者的区别与联系...

    # 把装饰器定义为类 # 定义中需要实现__call__(),__get__() 方法 import types from functools import wraps class Profiled: ...

  4. python万能装饰器实现计算函数的调用次数和执行时间

    直接上代码 # python万能装饰器实现计算函数的调用次数和执行时间 import timedef set_fun(func):num = 0 # 初始化次数def call_fun(*args, ...

  5. python函数装饰函数_Python精进-装饰器与函数对象

    本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...

  6. 使用python装饰器计算函数运行时间的实例

    装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率 今天就来见识一下 python 装饰器,到底是怎么工作的. 本文主要是利用python装饰器计算函数运行时间 一些需 ...

  7. python 运行时间 装饰器_python 装饰器统计某个函数的运行时间

    import datetime def count_time(func): def int_time(*args, **kwargs): start_time = datetime.datetime. ...

  8. python计算时间装饰器_使用python装饰器计算函数运行时间的实例

    装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率 今天就来见识一下 python 装饰器,到底是怎么工作的. 本文主要是利用python装饰器计算函数运行时间 一些需 ...

  9. Python 没有函数重载?如何用装饰器实现函数重载?

    摘要:Python 不支持函数重载.当我们定义了多个同名的函数时,后面的函数总是会覆盖前面的函数,因此,在一个命名空间中,每个函数名仅会有一个登记项(entry). 本文分享自华为云社区<为什么 ...

最新文章

  1. 普京谈“元宇宙”:这无疑是一种挑战
  2. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】【实验一】流水灯模块
  3. List有关知识与ArrayList的实现
  4. 基于VUE只是作为模版引擎的前后端分离
  5. 前端周刊第58期:送你 3 道面试题
  6. 深入理解for循环(执行顺序)
  7. 复旦nlp实验室 nlp-beginner 任务三:基于注意力机制的文本匹配
  8. 软件工程-可行性分析
  9. 小程序毕设作品之微信校园维修报修小程序毕业设计成品(7)中期检查报告
  10. 我与CSDN的2021 --从路人到一名万粉博主的自述
  11. python基础知识相关习题
  12. 协议僵化 or 协议僵化
  13. 【linux】运行run文件显示cannot execute binary file
  14. Magento 数据表结构 EAV模型详解
  15. Android转场动画(View Activity ARouter)
  16. 过去的互联网,modnet的出现
  17. warning: function returns address of local variable(函数参数返回错误)
  18. 【光通信】参数'G'和'GE’的技术实现区别
  19. AC/DC 反激 (Flyback) 控制器
  20. NJUPT 《信安数基》第 11 章解题攻略

热门文章

  1. VIM使用系列之一——配置VIM下编程和代码阅读环境
  2. C++(8)--数组及常用算法
  3. java学习_Python基础学习教程:从0学爬虫?让爬虫满足你的好奇心
  4. Java JUC工具类--CountDownLatch
  5. C++回调函数(callback)的使用
  6. 解决:Dockerfile 中执行 tar 命令始终报错:tar: /xx/xx: Cannot stat: No such file or directory tar: Exiting with
  7. 解决: Failed to execute ... maven-deploy-plugin... Return code is: 401, ReasonPhrase: Unauthorized.
  8. 「日常训练」 Genghis Khan the Conqueror(HDU-4126)
  9. 2017.9.5 postgresql加密函数的使用
  10. chrome用type=file获取图片路径并转base64字符串