Python入门---修饰器

       已经有了C、C++的基础,就想再来玩一玩Python,Python的数据类型、函数定义调用都还OK,吃编程基础不难理解,但接下来学习的知识与C、C++差别就有点大了,比如修饰器,下面是一个举例代码。
      首先修饰器是干吗用的呢,他是用来修饰函数的,在不改变原函数的调用方式的前提下,为原函数扩充某些功能。这个例子是从教学视频上学来的,感觉老师讲的不错,拿来与大家分享分享。
      
import time

def timer(func):
    def deco():
        start_time=time.time()
        func()
        stop_time = time.time()
        print("The func time is %s"%(stop_time-start_time))
    return deco

@timer # test1 = timer(test1)
def test1():
    time.sleep(3)
    print("in the test1")
test1()

      这是个比较简单的修饰器程序,该修饰器为函数test1()扩充的功能是:为test1()函数的运行计时。
      程序的运行过程有点复杂,所以记录下来一遍以后参考:
(1)程序开始:定义函数timer,注意对于Python定义函数可以理解为开辟一块内存来存放函数的程序,不去执行,甚至不执行检查其中内容的操作,这是Python与C、C++不一样的地方。
(2)执行@timer,这里其实就是执行 
test1 = timer(test1)
       不知道编译器是怎么知道test1的地址的,不过这里暂且这样认为:执行这一句是程序先把test1定义,即先为test1开辟一块内存空间,再执行timer(test1)。执行这一句即定义函数deco,为其开辟内存空间来存储代码。最后返回deco的存储地址,并把它赋值给test1。
       执行完这一句后,实际上test1已经被偷梁换柱成了deco。
(3)执行test1(),即执行deco()。这样便把扩展功能加了上去。

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章