Python|装饰器

一对象的概念python的所有内容都可以作为对象,这意味着这些内容可以作为参数作用于其他的“对象”,这不难理解,就像在函数中,可以把另一个函数作为参数,甚至是类作为参数,,因此经常看到函数的“嵌套”使用。def hi():return "hi yasoob!"def doSomethingBeforeHi(func):print("我是在executing hi()之前的装饰")print(func())doSomethingBeforeHi(hi)在这个例子中得到的输出如下:我是在executing hi()之前的装饰hi yasoob!可以的看到:之前定义的函数hi作为doSomethingBeforeHi这个函数的参数,并且在输出中并不影响它本身。二装饰器的作用顾名思义,装饰器的首要作用就是“装饰”,它装饰的种类有很多,只要是python的对象都可以被它所装饰。那装饰的意义在哪里呢?在一个函数增加功能但是不改变其中代码时,就可以使用装饰器来完善这种功能,这样做的意义在哪里呢?当这种新增功能需要运用到很多函数时,就只需要调用装饰器,而不是在每个函数上去修改,这样就节省了很多的时间和精力。三装饰器的用法最简单的装饰器其实就是上面的案例,这也是最直接易懂的——将待“装饰”的函数作为参数放入起“装饰”作用的函数中。当然,python提供了更加简洁且可用性更强的方法。首先引入对应的模块,然后定义装饰器,装饰器的定义方法和函数一致,在装饰器中,使用@wraps()的方法来接受一个函数进行封装,在它之后定义需要增加的内容,具体操作相信大家看代码就一目了然了。from functools import wraps#引入wraps模块def a_new_decorator1(a_func):#定义装饰器@wraps(a_func)#接收“a_func“函数进行装饰def wrapTheFunction1():#定义装饰内容print("我是在a_func ()之前的装饰")a_func()#保留函数自身功能print("我是在a_func ()之后的装饰")return wrapTheFunction1在这个例子中,“wrapTheFunction1”就是定义的“装饰”函数,也可以理解成“装饰”的方法。在装饰器定义完成后,接下来就是它的封装和使用了。封装装饰器的方法很简单,只需要@符号加上装饰器名称即可。@a_new_decorator1调用装饰器时,只需要在封装好的装饰器下面定义或者调用相应的函数即可。@a_new_decorator1def a_function_requiring_decoration1():print("我是函数本身功能")输出上面的函数可以看到如下结果:我是在a_func ()之前的装饰我是函数本身功能我是在a_func ()之前的装饰)需要注意的是,调用一次装饰器只能对一个函数装饰一次,多余的函数将不被装饰,这很像画油画,被装饰的函数就像是画板,即使两张画板叠在一起,颜色也只对最上层的画板起作用。但是在画油画时,画板颜色是可以被层层覆盖的,这是不是意味着装饰器也可以这样叠加呢?我们来看下面的例子。@a_new_decorator1@a_new_decorator1def a_function_requiring_decoration2():print("我是另一个函数")对它进行输出,得到如下结果我是在a_func ()之前的装饰我是在a_func ()之前的装饰我是另一个函数我是在a_func ()之后的装饰我是在a_func ()之后的装饰通过输出我们可以发现装饰器效果也是可以层层叠加的,这样就让“装饰”这个功能变得更加有可用性。END主  编   |   王文星责  编   |   黄章鱼能力越强,责任越大。实事求是,严谨细致。——where2go 团队微信号:算法与编程之美

(0)

相关推荐

  • python到底还有哪些函数我们还没见过?原来有这么多实用的函数

    本文将将主要介绍如下内容 函数介绍 1.1 函数的定义 所谓的函数,其实就是具有特定功能的一段代码块,都可以独立的运行 . 函数有5部分组成,分别是定义函数的关键字,函数的名字,圆括号(存放函数的参数 ...

  • 一文搞懂Python装饰器

    一.前言 本不打算专门写文来讲装饰器的,但有不少粉丝问到了,自己查阅了一些网上的装饰器教程,发现讲的通俗易懂的不多,也有不少照搬的文章.所以我这里专门来讲一讲它. 个人在用的人工智能学习网站推荐给大家 ...

  • 浅析Python装饰器

    浅析Python装饰器

  • 【进阶】一文读懂Python装饰器,搞清来龙去脉!

    (给机器学习算法与Python学习加星标,提升AI技能) 选自pouannes.github.io 作者:Pierre Ouannes 本文由机器之心(nearhuman2014)翻译 原文:http ...

  • 推荐8个炫酷的 Python 装饰器!

    Python 编程语言的一大优点是它把所有功能都打包到一个小包中,这些功能非常有用.许多特性可以完全改变 Python 代码的功能,这使得该语言更加灵活.如果使用得当,其中一些功能可以有效缩短编写程序 ...

  • 说说对于Python装饰器的理解?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • 人人都能看懂的 Python 装饰器入门教程!

    很多人认为理解了装饰器的概念和用法后,会觉得自己的 Python 水平有一个明显的提高. 但很多教程在一上来就会给出装饰器的定义以及基本用法,例如你一定会在很多文章中看到例如代码运行时间计时器等相关常 ...

  • Python 中的函数装饰器和闭包

    函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另一个函数,称为被装饰函数.装饰器可以修改这个函数再将其返回, ...

  • Selenium2+python自动化55-unittest之装饰器(@classmethod)

    前言 前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间. 于是就想是不是可以 ...

  • 神奇的Python property装饰器:1行代码让Python方法秒变属性

    神奇的Python property装饰器:1行代码让Python方法秒变属性