"""
装饰器: 不改变原函数的调用方式和函数的前提下, 增加额外的功能, 其本质就是一个闭包 ---输出函数的运行时间
"""
import time
from functools import wraps def get_running_time(func): # 使用wraps, 保证被装饰过的函数__name__的属性不变
@wraps(func)
def inner(*args, **kwargs):
start_time = time.time()
res = func(*args, **kwargs)
end_time = time.time()
print('the {} running time is {}'.format(func.__name__, (end_time - start_time))) return res return inner @get_running_time
def run1000000():
lst = []
for i in range(1000000):
lst.append(i) return lst @get_running_time
def run1000000_2():
return [i for i in range(1000000)] run1000000()
run1000000_2() # 运行结果
# the run1000000 running time is 0.16900038719177246
# the run1000000_2 running time is 0.09100198745727539

python---输出函数运行时间的装饰器的更多相关文章

  1. python函数式编程之装饰器(一)

    1.开放封闭原则 简单来说,就是对扩展开放,对修改封闭 在面向对象的编程方式中,经常会定义各种函数. 一个函数的使用分为定义阶段和使用阶段,一个函数定义完成以后,可能会在很多位置被调用 这意味着如果函 ...

  2. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  3. python函数与方法装饰器

    之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...

  4. python学习日记(装饰器的补充)

    如何返回被装饰函数的函数名及注释? 问题及实现 先看典型的装饰器: def wrapper(f):#装饰器函数,f是被装饰函数 def inner(*args,**kwargs): '''执行函数之前 ...

  5. guxh的python笔记三:装饰器

    1,函数作用域 这种情况可以顺利执行: total = 0 def run(): print(total) 这种情况会报错: total = 0 def run(): print(total) tot ...

  6. python设计模式之内置装饰器使用(四)

    前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...

  7. python 3.x 的装饰器笔记

    今天学到了python的装饰器,感觉这个东西还是稍微有些复杂,所以记录下来,方便以后的查找.虽然标题是python 3.x的装饰器,但是我也没有怎么用过python 2.x,感觉上应该是和python ...

  8. python基础8(装饰器)

    1.装饰器本质 装饰器的本质:一个闭包函数 装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展 2.装饰器函数 假设要写一个输出函数执行时间的装饰器 def timer(func): ...

  9. python 中多个装饰器的执行顺序

    python 中多个装饰器的执行顺序: def wrapper1(f1): print('in wrapper1') def inner1(*args,**kwargs): print('in inn ...

  10. Python函数编程——闭包和装饰器

    Python函数编程--闭包和装饰器 一.闭包 关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数).而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数.当其中一个 ...

随机推荐

  1. DataFrame计算corr()函数计算相关系数时,出现返回值为空或NaN的情况+np.log1p()

  2. CF908G&LOJ6697口胡

    为什么我从ACAM做到了数位DP啊 考虑枚举前缀顶着最高位和后缀没有顶着的最高位. 考虑计算一个数对答案的贡献.统计 \(t\) 的出现次数记录到 \(c[t]\) 中. 贡献就是 \(\sum_{i ...

  3. MySQL报错 SQL ERROR:1064 ,SQLState:42000

    使用mysql新增数据时报错,具体信息如图所示: 错误原因: 所建的表中 表名或字段名与数据库关键字冲突 解决办法 可以根据报错信息,查看错误的具体位置,找到数据库中对应的字段,查询是否与关键字(不分 ...

  4. 在数据结构与算法中 传值方式(C语言)

    传值方式 前言 当初学顺序链表的时候,书上就出现了这样的语言,如下所示: Status InitList_Sq(SqList &L) { //构造一个空的线性表L. L.elem = (Ele ...

  5. 敏捷开发之Scrum方法运用

    目前软件开发除了强调产品质量,同时对产品能够快速发布并且迅速适应市场变化的要求也日益强烈.为适应这种开发环境和市场需求,传统的软件开发模式已被敏捷开发模式所替代.本文介绍敏捷软件开发中的Scrum方法 ...

  6. redis哨兵功能

    redis哨兵功能 redis-Sentinel(哨兵) 前言 当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户都没有实现主从切换的功能 redis ...

  7. Colbalt Strike之CHM木马

    一.命令执行(calc)木马生成 1.生成木马 首先创建一个根目录,文件名为exp 在文件夹里创建两个目录和一个index.html文件 在两个目录里分别创建txt文件或html文件 index.ht ...

  8. FusionCube 9000 虚拟化之数据库场景(虚拟化超融合基础设施)

    1.本场景为fusioncube9000虚拟化场景,带两台dbn节点. 配置清单: 1台cna节点 2台dbn节点,部署数据库操作系统,一般安装oracle数据双机. 2台mcna节点,作为管理节点, ...

  9. 半吊子菜鸟学Web开发 -- PHP学习3-文件

    目录 1 PHP文件系统 1.1 PHP文件的读取 1.4 获得文件的大小 1.5 PHP写入文件 1.6 删除文件 1 PHP文件系统 1.1 PHP文件的读取 文件读取的函数是file_get_c ...

  10. Spring基于xml注入bean的几种方式?

    (1)Set方法注入: (2)构造器注入:①通过index设置参数的位置:②通过type设置参数类型: (3)静态工厂注入: (4)实例工厂: