ITPub博客

首页 > 应用开发 > Python > 你想知道python装饰器的由来吗?

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

原创 Python 作者:python交流 时间:2019-03-06 22:11:04 0 删除 编辑

前言

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)


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

总结

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


素材来源于网络:侵删


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69912078/viewspace-2637753/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
上路:9458 中路:79 下来025 有干货

注册时间:2019-03-04

  • 博文量
    188
  • 访问量
    236032