python day16 之装饰器-不修改源代码增加功能

import time

def foo():
    print("foo....")
    time.sleep(1)
def bar():
    print("bar>>>")
    time.sleep(2)
def timea(x):
    starttime = time.time()
    x()
    overtime = time.time()
    print("spend %s"%(overtime -starttime))
timea(foo)
timea(bar)

  老板说,增加个time统计功能,好了,timea模块写完了~~~~~~~~~~~~

老板又说,其他员工投诉了,你改了调用方式,其他的程序都要重新写啊...

经过第二课时的学习,知道了,内存地址,用return 返回内存地址,然后赋值给原来的参数,那么,问题解决了!

import time

def foo():
    print("foo....")
    time.sleep(1)
def bar():
    print("bar>>>")
    time.sleep(2)
def timea(x):
    def inner():
        starttime = time.time()
        x()
        overtime = time.time()
        print("spend %s" % (overtime - starttime))
    return inner
foo = timea(foo)
bar = timea(bar)
foo()
bar()                      
import time

def timea(x):
    def inner():
        starttime = time.time()
        x()
        overtime = time.time()
        print("spend %s" % (overtime - starttime))
    return inner
@timea
def foo():
    print("foo....")
    time.sleep(1)

@timea
def bar():
    print("bar>>>")
    time.sleep(2)
foo()
bar()
 
 

后来老师又讲了很高大上的@方法,将“@”放到def的上表面就可以了, @timea 代表了 fo0= timea(foo)

 

猜你喜欢

转载自www.cnblogs.com/bdua/p/12230913.html
今日推荐