python中关于装饰器的疑问?

# -*- coding: UTF-8 -*-
import time
def foo():
   print 'in foo()'
# 定义一个计时器,传入一个,并返回另一个附加了计时功能的方法
def timeit(func):
   # 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装
   def wrapper():
       start = time.clock()
       func()
       end = time.clock()
       print 'used:', end - start
   # 将包装后的函数返回
   return wrapper
foo = timeit(foo)
foo()
foo()

通过包装函数,实现了对foo函数的计时功能,

疑问1;通过包装函数后,原来的foo()函数改变了吗?

疑问2:如果后来还要调用原来定义的foo()函数怎么办?

疑问3:同样是实现计时功能,以下程序不是更方便?而且原foo()函数没改变?

def g(func):
   start = time.clock()
   func()
   end = time.clock()
   print 'used:', end - start
g(foo)


Quentin3824726
浏览 1338回答 1
1回答

ruibin

疑问1;通过包装函数后,原来的foo()函数改变了吗?疑问2:如果后来还要调用原来定义的foo()函数怎么办?是的,改变了。如果你不行foo改变可以把这句foo = timeit(foo)换成foo1 = timeit(foo)然后你调用foo就是原函数,调用foo1就是装饰过的函数。疑问3:同样是实现计时功能,以下程序不是更方便?而且原foo()函数没改变?装饰器的作用不是处理一个函数,而是批量处理函数。他能扩展函数的功能,而不改变原函数。这对函数式编程的特殊化定制很有帮助,所以要实现单个功能的函数很简单,装饰器的作用是可以抽离出大量与函数功能本身无关的雷同代码并继续重用,简单点说就是重用,这其实就是让函数更有用!函数最重要的作用就是实现重用~
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python