Python入门---修饰器

本文通过一个计时器装饰器的例子,介绍了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()。这样便把扩展功能加了上去。

      

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值