Discuss / Python / 个人理解

个人理解

Topic source

其实这一节的内容理解了以后很简单。 其实就是一种语法的理解与使用:

@xxx #装饰器语法
def func(): #函数
    pass

本质就是廖老师讲到的一句话:

func=xxx(func)

本质:把我们的函数作为参数传到装饰器函数后,装饰器函数对它进行修改,然后把名字什么的全部修改到和原来一样,这样就完成了不露痕迹的“函数改造”过程。 使用:使用的时候就不用总是纠结本质啦,本质只需要理解一次就够了。我们只需要知道,使用了装饰器,它往我们的函数加了一些代码,把它改造了一下,这就够了。(详细的回去好好看廖老师教程) 举个栗子: 比如说老师所用到的这个函数:@functools.wraps(func) 它做了什么呢?我们回到完整代码看一下:

import functools

def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw): #看这里!
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

那么它做了什么呢?它就是把wrapper的__name__给改了,其他的wrapper的代码原封不动。 总结: 装饰器就是一种可以修改我们函数功能的语法糖(像糖果一样可口对吧),我们使用时不需要纠结本质,自己编写装饰器时才需要考虑本质,不过也不难对吧。 什么,你问我为什么@xxx这样的语法能运行? 那是解释器要干的事情,我们会用就好啦~


  • 1

Reply