文档章节

python 装饰器

hyhlinux
 hyhlinux
发布于 2016/12/08 10:29
字数 320
阅读 5
收藏 1

1.记录运行时间
def bench(fun):
    print 'bench:', time.clock()

    def wrapper(*arg, **kwarg):
        start = time.clock()
        ret = fun(*arg, **kwarg)
        print 'ben who: ', fun.__name__, 'time:', time.clock() - start
        return ret

    return wrapper

2.添加log

def log(fun):
    print'log:', time.clock()
    def wrapper(*arg, **kwarg):
        ret = fun(*arg, **kwarg)
        print 'log..who:', fun.__name__, arg, kwarg
        return ret

    return wrapper

 

3.多重

def first(func):
    print '%s() was post to first()' % func.func_name
    def _first(*args, **kw):
        print 'Call the function %s() in _first().' % func.func_name
        return func(*args, **kw)
    return _first


def second(func):
    print '%s() was post to second()' % func.func_name
    def _second(*args, **kw):
        print 'Call the function %s() in _second().' % func.func_name
        return func(*args, **kw)
    return _second

'''
meth1:
@first
@second
test() was post to second()
_second() was post to first()

test->_second->_first

@second
@first
test() was post to first()
_first() was post to second()

test->_frist()->second

------------------

meth2:
when call test()
test() was post to second()
_second() was post to first()
Call the function _second() in _first().
Call the function test() in _second().
hello in test
test->_second->_first
test()  
    1._first()-->_second()
       print 'Call the function %s() in _first().' % func.func_name     #func==>_second
       return func(*args, **kw)                                         #_second() 

    2._second()-->test()
        print 'Call the function %s() in _second().' % func.func_name   #func==>test
        return func(*args, **kw)                                        #test()

'''


@first
@second
def test():
    print 'hello in test'

 

 

补充:

装饰器的运行时间:

    在使用@的时候,装饰器就已经开始工作,而不是在被装饰是函数调用的时候。

    即,不调用test(), 只要使用@first后,first()函数就会被调用.

 

© 著作权归作者所有

共有 人打赏支持
hyhlinux
粉丝 7
博文 167
码字总数 51777
作品 0
海淀
程序员

暂无文章

SQL count(*) 和count(1)的区别

开发中经常会使用这两个聚合函数,作用都是用来统计记录行,今天查找资料发现,其实这两个函数并没有区别, 实践才是检验的标准,首先看执行计划(表是我自己建立的): 可以看到,两个执行计...

一曲图森破
2分钟前
0
0
ppwjs之bootstrap文字排版:字体设置

<!DOCTYPT html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>ppwjs欢迎您</title><link rel="icon" href="/favicon.ico" ......

ppwjs
5分钟前
0
0
区块链100讲:详解区块链之P2P网络

1 P2P网络 如果我们简单来看 P2P 技术,它的应用领域已经非常广泛了,从流媒体到点对点通讯、从文件共享到协同处理,多种领域都有它的身影出现。 同样的,P2P 的网络协议也有很多,比较常见的...

HiBlock
20分钟前
0
0
74.expect脚本同步文件以及指定host同步文件 构建分发系统文件和命令

20.31 expect脚本同步文件: 在expect脚本中去实现在一台机器上把文件同步到另外一台机器上去。核心命令用的是rsync ~1.自动同步文件 #!/usr/bin/expect set passwd "123456" spawn rsync -a...

王鑫linux
44分钟前
0
0
TypeScript项目引用(project references)

转发 TypeScript项目引用(project references) TypeScript新特性之项目引用(project references) 项目引用是TypeScript 3.0中的一项新功能,允许您将TypeScript程序构建为更小的部分。 通过这...

durban
49分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部