码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器一

时间:2015-12-27 20:23:53      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

在学习装饰器之前,我们先从熟悉的函数入手。。。。

函数一:

技术分享

foo:函数名,表示函数在内存中的地址。

foo() :表示执行函数foo。

函数二:

技术分享

执行foo()不再是以前的函数,而是lambda函数。这里就说明了不仅变量可以重命名,而且函数也可以重命名,下次执行就调用重命名后的函数。

函数三:

技术分享

简单说明执行顺序:

首先执行1、2、3,将其存入内存

再接着将3中的func传给arg,也就是将实参传给形参,接着arg()变为func()

最后执行func(),打印字符aa

也就是说函数也可以作为参数进行传递,即在python中一切都是对象,对象都是由类创建的。

函数四:

技术分享

解释:

       执行auth()函数,将f1传递给func,即f1()等价于func(),接着执行inner函数,由于inner函数没有被调用,所以不执行,接下来return inner,也就是auth函数返回一个inner函数,就可以等价为代码中注释的内容。下来执行inner函数,首先打印before,再执行原函数f1(),即打印字符f1,执行完毕。

      从上面代码可以看出,auth函数中有两层函数。

函数五:

上面已经提到过,函数可以重命名,因此函数四可以写成为

技术分享

函数六:

在python中,可以将函数五写成如下的形式

技术分享

在f1()上面写成@auth,它就表示为先执行auth(f1),再将auth(f1)赋值为f1.这就是python的装饰器。

这里执行auth函数,被装饰的函数作为参数auth(f1)。auth函数的返回值,赋值给被装饰的函数的函数名。

装饰器一

标签:

原文地址:http://www.cnblogs.com/crazyforever/p/5080607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!