python中装饰器的简单用法

来源:互联网 发布:在淘宝卖宠物用品 编辑:程序博客网 时间:2024/05/23 00:00

装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可以为添加额外的功能同时又不影响业务函数的功能。

比如,运行业务函数fun()同时打印运行花费的时间

1,运行业务函数fun()同时打印运行花费的时间

import time

def dec(fun):
    start = time.time()
    fun()
    end = time.time()
    a = end - start
    print a

def myfun():
    print 'run myfunction'

dec(myfun)

运行结果

(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.00108599662781
但是每次运行myfun都要调用dec,下面作下变动解决这个问题

2,

import time

def dec(fun):
    def wrap():
        start = time.time()
        fun()
        end = time.time()
        a = end - start
        print a
    return wrap

def myfun():
    print 'run myfunction'

myfun=dec(myfun)
myfun()

运行结果:

(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.00122618675232
这个装饰器dec就实现了,并且不影响函数myfun功能

3,装饰器@符

import time

def dec(fun):
    def wrap():
        start = time.time()
        fun()
        end = time.time()
        a = end - start
        print a
    return wrap

@dec
def myfun():
    print 'run myfunction'

myfun()
结果

(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.000470876693726

使用了@后,就不用给myfun重新赋值了


@dec就相当于myfun=dec(myfun)


原创粉丝点击