直接上代码:

import time
from functools import wraps # 定义装饰器
def fn_timer(function):
@wraps(function)
def function_timer(*args,**kwargs):
t0 = time.time()
result = function(*args,**kwargs)
t1 = time.time()
print '[finished {func_name} in {time:.2f}s]'.format(func_name = function.__name__,time = t1 - t0)
return result
return function_timer # 使用装饰器来计时
@fn_timer
def download(url):
# 模拟下载3秒
print 'start to download from {0}...'.format(url)
time.sleep(3)
print 'download finished!' download('www.baidu.com')
start to download from www.baidu.com...
download finished!
[finished download in 3.00s]

随机推荐

  1. Angular 组件与模板 - 属性指令

    指令概览 在 Angular 中有三种类型的指令: 组件 — 拥有模板的指令 结构型指令 — 通过添加和移除 DOM 元素改变 DOM 布局的指令 属性型指令 — 改变元素.组件或其它指令的外观和行为 ...

  2. 关于Bootstrap的理解

    Web开发领域存在大量的反复劳动.以创建一个菜单为例,不同的人或是同一个人在不同的时期去构建一个菜单.他创建出来的菜单格式都会存在差异:随着构件的菜单越来越多,我们会发现假设将构建菜单这件事形成一个框 ...

  3. 表空间_暂时表空间引起的错误:ora-01652 小例

    原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46888243 报暂 ...

  4. Linq------错误: Unable to determine the principal end of an association between the types

    [Table("bma_stores")] public class Store { //加上即可 [Required] public virtual Product Produc ...

  5. 剑指 offer set 25 求 1+2+...+n

    题目 要求不能使用乘除法, for, while, if else, switch, case 等关键字 思路 1. 循环已经命令禁止, 禁用 if, 意味着递归也不能使用. 但即便如此, 我们仍然要 ...

  6. HashMap实现原理、核心概念、关键问题的总结

    简单罗列一下较为重要的点: 同步的问题 碰撞处理问题 rehash的过程 put和get的处理过程 HashMap基础: HashMap的理论基础:维基百科哈希表 JDK中HashMap的描述:Has ...

  7. shell脚本学习总结09--分支与循环结构

    if 条件语句 = start ]];then echo start app elif [[ $ = stop ]];then echo stop appelif [[ $1 = ... ]];the ...

  8. 利用脚手架vue cli搭建vue项目

    vue.js https://vuejs.org/ 基础: http://cn.vuejs.org/v2/guide/installation.html 1.安装需要利用npm包管理器,所以首先安装n ...

  9. flask--简记

    Jinjia变量过滤器: safe 渲染值时不转义 capitalize 把值的首字母转换成大写,其他字母转换成小写 lower 把值转换成小写形式 upper 把值转换成大写形式 title 把值中 ...

  10. 设计模式之——Builder建造模式

    Builder模式又叫建造模式,是用于组装具有复杂结构的实例的模式. 示例程序是编写一个文档,并且写入到文件中,该文档具有以下结构,含有标题,字符串,一些条目. Builder抽象类,为建造模式的核心 ...