有点烦,手打帖子写的第二遍,第一遍写了一大半下课吃饭电脑被人给关了,蛋疼,结果看到这个网站有数据恢复还高兴了一下,然而恢复的是个啥?我开贴的缩进吗?蛋疼,我觉得需要优化。
班主任让我来这里写个学习经历贴,正好前段时间学了装饰器,来这里就当回忆一下上课内容了,就是班主任不让打代码,有点蛋疼,随便看看吧。
说到装饰器,我们先讲一下闭包。
闭包有三个特点:1.嵌套定义一个内部函数;2.外部函数会返回内部函数的引用;3.内部函数会使用到外部函数的参数。
讲完闭包的特点大家应该也能在自己脑袋里面想像出它的样子了,如何运用闭包呢,我们先设定一个变量等于闭包的外部函数,并传递一个参数给它,然后再向这个变量传递一个参数,此时运行的过程为先执行闭包的外部函数,执行外部函数的同时返回内部函数,并将传递给我们设置的变量的函数传递给内部函数执行,最后输出我们想要的结果。
在我理解中,闭包的作用就是减少参数的传递,增加代码的可移植性。
在我看来,装饰器就是建立在闭包上的语法糖,主要使用方式为@外部函数名下方接一个函数。下面说一下个人对于装饰器的理解,装饰器就是一个特殊的闭包,能够在不改变原有代码的情况下,扩展原有代码的功能。
基础装饰器,相当于将之前闭包中传递的参数变为下方的函数,先执行外部函数,再执行内部函数,最后执行装饰器下方的函数。
带参数的装饰器呢,就是在装饰器下方的函数中给出一个或多个参数,同基础装饰器的执行过程,不过装饰器下方的函数中的参数将会传递至装饰器的内部函数中。
多重装饰,则是在装饰器下方再接一个或者多个装饰器,不过最后仍然需要接一个函数,在执行时,解释器读到第一个装饰器时,由于下方是一个装饰器而非函数传递至装饰器中,此装饰器会被暂停,解释器将继续往下,直至到达函数上方第一个装饰器才开始执行,所以多重装饰在执行的时候是最靠近下方函数的装饰器逐步往上执行,我个人理解的此时相当于层层嵌套,在逐步执行完所有装饰器的外部函数之后,才会开始执行内部函数,内部函数的执行顺序也是和基本装饰器一致,弄明白在这个过程中函数传递的过程,就很好理解了。
类装饰器的话,emmmm....我感觉差不多五百字了吧,那就不写了,反正都是一个道理,弄明白传递的顺序就好了。
个人的一些理解,也不知道有没有错误。希望有人能够指出错误。
这个论坛都是僵尸啊,我估计也没人看,全当自己做总结了。 |
|