功能目标

编写一个可以打印被装饰函数名称、执行时间、内存地址得装饰器

前置依赖包

import time

import functools

from decorator import decorator

基于普通的函数嵌套

> def log1(fn):
     def _wrapper(*args, **kwargs):
        start = time.clock()
        result = fn(*args, **kwargs)
        print("%s is invoked with time consumed: %s seconds at address %s" % (fn.__name__, str(time.time() - start), id(fn)))
        return result
    return _wrapper

基于@decorator

@decorator
def log(f, *args, **kwargs):
    start = time.time()
    result = f(*args, **kwargs)
    print("%s is invoked with time consumed: %s at address %s" % (f.__name__, str(time.time() - start), id(f)))

    return result

使用@functools

def log2(f):
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        start = time.clock()
        result = f(*args, **kwargs)
        print("%s is invoked with time consumed: %s seconds at address %s" % (f.__name__, str(time.time() - start), id(f)))
        return result
    return wrapper

测试

@log2
def f11(x, y):
    return x**y

result = f11(2,3)
print("result:" + str(result))

切换到不同的实现中,他们的效果是相同的。

最新文章

  1. Oracle数据库文件路径变更
  2. C#中使用FreeImage库加载Bmp、JPG、PNG、PCX、TGA、PSD等25种格式的图像(源码)。
  3. softwareTesting_work2_question2
  4. MATLAB axis和axes的区别
  5. Range
  6. django 一些库
  7. mine layer(2008 World Final C)
  8. iOS-Andriod百度地图仿百度外卖-饿了么-选择我的地址-POI检索/
  9. 7款纯CSS3实现的炫酷动画应用
  10. 初学C++,开博第一篇
  11. HTTP Authorization
  12. xp每天定时关机命令
  13. 【个人笔记】《知了堂》mysql表连接
  14. ajaxfileupload原理及用法,主要用于即想用ajax序列化传递参数,又必须上传文件
  15. [MicroPython]TurnipBit开发板DIY自动浇水系统
  16. Viewing the interface of your Swift code,查看Swift代码的头文件的三种方法
  17. Windows10下pip的配置文件设置
  18. leetcode 443. String Compression
  19. 解题:JSOI 2008 Blue Mary的战略地图
  20. 小程序的movable-view怎么持续移动

热门文章

  1. List集合的ForEach扩展
  2. 杭电1027Ignatius and the Princess II模拟
  3. java发送http请求和多线程
  4. HDFS 详解
  5. 跟着实例学习ZooKeeper的用法: 分布式锁
  6. ros使用时的注意事项&技巧
  7. iOS 在cell中使用倒计时的处理方法(新)
  8. iOS日常学习 - iOS10上关于NSPhotoLibraryUsageDescription等问题
  9. Linux系统故障-Repair filesystem
  10. 【bzoj4806~bzoj4808】炮车马后——象棋四连击