python decorator是一个很好的特性,大师级的decorator会让你的编程思路更宽泛,程序更为python式。现在我们来谈谈Python的装饰器。
装饰器存在两种应用场景,一种是增强装饰函数的行为,另一种是代码重用。
让我们先看一个例子并获得直观的感觉。
输出:
这个装饰器是用来计算函数执行时间的。原本test1函数只是休眠1秒,然后输出字符串,但是在使用装饰器(out_wrapper)后,它的功能多了一项:输出执行时间。 这是一个最简单的装饰器,实现了 “增强被装饰函数的行为”。而我们需要思考的是为什么装饰器是这个样子的? 那是因为行为良好的装饰器必须要遵守两个原则:
1、不能修改被装饰函数的代码;
2、不能修改被装饰函数的调用方式;
这并不难以理解,因为在生产环境中如果我们要给某个函数添加功能,最好不要修改该函数的源码,因为可能造成意想不到的影响,或者这个代码是一个大神写的,你根本不知从何改起;同时你也不能修改其调用方式,因为你不知道程序中有多少地方调用了此函数。
那么我们从函数和函数名说起吧。
输出:
定义函数func,调用函数func,将函数名func赋值给y,调用y。y=func 表明:函数名可以赋值给变量,并且并不影响调用。
小编推荐一个学python的学习qun 740,3222,34
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
这其实和整数、数字是一样的:
明白了这一点,下面再说说高阶函数: 高阶函数满足如下两个条件中的任意一个: a. 可以接收函数名作为实参; b. b.返回值中可以包含函数名;
其实python标准库中的map和filter等函数就是高阶函数。
自定义一个能返回函数的函数,也是高阶函数
def f(l): return map(lambda x: x*5, l) a = f(l)for i in a: print(i)
有了这些基础,我们就可以尝试实现一下类似装饰器的功能了。
总结
装饰器的本质是函数,其参数是另一个函数(被装饰的函数)。 装饰器通常会额外处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象。行为良好的装饰器可以重用,以减少代码量。
素材来源于网络:侵删
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。