温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

你想知道python装饰器的由来吗?

发布时间:2020-08-08 05:38:17 来源:ITPUB博客 阅读:149 作者:python交流 栏目:编程语言
前言

python decorator是一个很好的特性,大师级的decorator会让你的编程思路更宽泛,程序更为python式。现在我们来谈谈Python的装饰器。

装饰器存在两种应用场景,一种是增强装饰函数的行为,另一种是代码重用。
让我们先看一个例子并获得直观的感觉。


你想知道python装饰器的由来吗?


输出:


你想知道python装饰器的由来吗?


这个装饰器是用来计算函数执行时间的。原本test1函数只是休眠1秒,然后输出字符串,但是在使用装饰器(out_wrapper)后,它的功能多了一项:输出执行时间。 这是一个最简单的装饰器,实现了 “增强被装饰函数的行为”。而我们需要思考的是为什么装饰器是这个样子的? 那是因为行为良好的装饰器必须要遵守两个原则:

1、不能修改被装饰函数的代码;

2、不能修改被装饰函数的调用方式;

这并不难以理解,因为在生产环境中如果我们要给某个函数添加功能,最好不要修改该函数的源码,因为可能造成意想不到的影响,或者这个代码是一个大神写的,你根本不知从何改起;同时你也不能修改其调用方式,因为你不知道程序中有多少地方调用了此函数。
那么我们从函数和函数名说起吧。


你想知道python装饰器的由来吗?


输出:


你想知道python装饰器的由来吗?


定义函数func,调用函数func,将函数名func赋值给y,调用y。y=func 表明:函数名可以赋值给变量,并且并不影响调用。

小编推荐一个学python的学习qun 740,3222,34
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

这其实和整数、数字是一样的:


你想知道python装饰器的由来吗?

明白了这一点,下面再说说高阶函数: 高阶函数满足如下两个条件中的任意一个: a. 可以接收函数名作为实参; b. b.返回值中可以包含函数名;

其实python标准库中的map和filter等函数就是高阶函数。


你想知道python装饰器的由来吗?

自定义一个能返回函数的函数,也是高阶函数

def f(l): return map(lambda x: x*5, l)
a = f(l)for i in a: 
print(i)
你想知道python装饰器的由来吗?


有了这些基础,我们就可以尝试实现一下类似装饰器的功能了。

总结

装饰器的本质是函数,其参数是另一个函数(被装饰的函数)。 装饰器通常会额外处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象。行为良好的装饰器可以重用,以减少代码量。


素材来源于网络:侵删


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI