关于decorator 的理解

来源:互联网 发布:画平面图软件 编辑:程序博客网 时间:2024/05/29 18:59

今天对于python学习到了decorator这一块的地方,以及前面的的返回函数、匿名函数等等。
自学python从11.19日开始算起到现在快要满一个月了。记录一下自己学的东西,尤其是现在我还没有弄明白的地方,因为大脑存在着遗忘的特点我本着能记录绝对不偷懒,每个周末开始对自己的这一周的学习进行一次回顾复习与总结。这可能是我刚刚开始对自己负责的地方,我相信在我现实中的朋友们、亦或者是同事是不会浏览这个类别的博客的。因此我可以做一个自我,来学的我所喜欢的东西。
入门python我所遇到的问题有:
1.相对于视频,我个人对于文字更加喜欢,可以进行反复的推敲。速度也可以自我把控,然而现在所阅读的python入门是廖雪峰(廖大大)入门教程,对于一个在大学中仅仅在大一的时候学过VB的人来说,有些地方还是不太会。
递归——这一块的函数太过于抽象画,现在还没有搞懂,计划将这个问题滞后放置于阅读完一遍python教程后再来看它(汉诺塔)
高阶函数——这一类的高级函数的理解不是很透彻,虽然过了一遍但是在自己写代码的时候仍然不太会运用,里面包含着匿名函数、map|reduce、filter、sorted、装饰函数(decorator)、返回函数以及偏函数
今天在看装饰函数遇到的问题有:

import functoolsdef log(text='call'):    def decorator(func):        @functools.wraps(func)        def wrapper (*args,**kw):            print(text,'begin')            func(*args,**kw)            print(text,'end')            return         return wrapper    return decorator@log()def now():    print('5555')print(now())@log(text='sdf')def f():    print('788')print(f())

对于上面的代码有一行还没有读懂func(*args,**kw)
我暂时是这么理解的:func 是装饰函数(decorator)的变量(*args,**kw)func 的变量。装饰函数的性质是
假设我们要增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。本质上Decorator是一个高阶的返回函数
**我们来剖析上面的语句,首先执行log(‘execute’),返回的是decorator函数,再调用返回的函数,参数是now函数,返回值最终是wrapper函数。
以上两种decorator的定义都没有问题,但还差最后一步。因为我们讲了函数也是对象,它有name等属性,但你去看经过decorator装饰之后的函数,它们的name已经从原来的’now’变成了’wrapper’:——廖雪峰python3教程 **

0 0
原创粉丝点击