装饰器一直是我们学习python难以理解并且纠结的问题,想要弄明白装饰器,必须理解一下函数式编程概念,并且对python中函数调用语法中的特性有所了解,使用装饰器非常简单,但是写装饰器却很复杂。为了讲清楚装饰器,我们讲一个生动的例子如下(由于后文装饰器的代码例子,全程和这个形象生动的说明很一致,所以务必看懂这个例子):
举个简单的例子:假设很久之前你写过一个函数,现在你突然有了个想法就是你想看看,以前那个函数在你数据集上的运行时间是多少,这时候你可以修改之前代码为它加上计时的功能,但是这样的话是不是还要大体读读你之前的这个的代码,稍微搞清楚一点它的逻辑,才敢给它添加新的东西。这样是不是很繁琐,要是你之前写的代码足够乱足够长,再去读它是不是很抓狂...
实际工作中,我们常常会遇到这样的场景,可能你的需求还不只是这么简单。那么有没有一种可以不对源码做任何修改,并且可以很好的实现你所有需求的手段呢?答案当然是有,这就是要介绍的python装饰器。有了装饰器,你除了不用担心前面提到的问题,并且还可以很好的处理接下来要做的事:那就是现在你又有了一个新的需求,比如为另一个函数添加计时功能,这时就非常简单了,把要装饰的函数丢给装饰器就好了,它会自动给你添加完功能并返回给你。
所以说:装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象(函数的指针)
那么要想理清楚装饰器,我们必须先了解下面几样东西哦,如果对这些全部了解的话,那么装饰器就很简单了。
1,函数
函数是什么呢?
在python中,使用关键字def和一个函数名以及一个可选的参数列表来定义函数,函数使用return关键字来返回值,我们一般说的函数是指函数名,比如foo,而foo()已经执行函数了,foo()是什么类型取决于return的内容是什么类型!!!
函数的作用是什么?
减少重复代码
使程序变得可扩展
使程序变得易维护
2,函数作用域
在python函数中会创建一个新的作用域,python高手也会称函数有自己的命名空间,也就是说,当函数体中遇到变量时候,python首先会在该函数的命名空间中寻找变量名,python中有几个函数用来查看命名空间。
3,函数即对象
在python的世界里,函数和[1,2,3],'abc',8等一样都是对象,而且函数是最高级的对象(对象是类的实例化,可以调用相应的方法,函数是包含变量对象的对象)。
函数对象的调用仅仅比其他对象多了一个()而已,foo,bar和a,b一样都是个变量名,为什么函数只有加载到内存里面才可以被调用?
注意:这里说的函数都是指函数名,比如foo;而foo()已经执行函数了,foo()是什么类型取决于return的内容是什么类型!!!
以上内容为大家介绍了python装饰器的概念,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。