前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python装饰器

Python装饰器

作者头像
Clive
发布2018-09-26 14:38:36
5270
发布2018-09-26 14:38:36
举报
文章被收录于专栏:Clive的技术分享
代码语言:javascript
复制
Python的装饰器可以做一些类似Java SpringBoot AOP切面注解的事情。
代码语言:javascript
复制
# 无参数decorator
import time

def performance(f):
    def fn(*args, **kw):
        start = time.time()
        print 'function start'
        r = f(*args, **kw)
        print 'function finish'
        end = time.time()
        print 'call %s() in %fs' % (f.__name__, (end - start))
        return r
    return fn

@performance
def factorial(n):
    print 'factorial'
    return reduce(lambda x,y: x*y, range(1, n+1))

print factorial(10)
代码语言:javascript
复制
输出:
function start
factorial
function finish
call factorial() in 0.005252s
3628800
代码语言:javascript
复制
# 有参数decorator
import time

def performance(unit):
    def perf_decorator(f):
        def wrapper(*args, **kw):
            t1 = time.time()
            r = f(*args, **kw)
            t2 = time.time()
            t = (t2 - t1) * 1000 if unit=='ms' else (t2 - t1)
            print 'call %s() in %f %s' % (f.__name__, t, unit)
            return r
        return wrapper
    return perf_decorator

@performance('ms')
def factorial(n):
    return reduce(lambda x,y: x*y, range(1, n+1))

print factorial(10)
代码语言:javascript
复制
输出:
call factorial() in 4.901886 ms
3628800
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档