ad

《Python学习笔记 从入门到实战》_更了解Python的途径之一_9.2 装饰器:拓展函数功能

网友投稿 109 2023-11-07

【摘要】 本书摘自《Python学习笔记 从入门到实战》一书中第9章,第2节,由张学建编著。

9.2 装饰器:拓展函数功能

9.2.1 创建装饰器

在 Python 程序中,可以使用装饰器给不同的函数或类插入相同的功能。与其他高级语 言 相 比 ,Python 语言不但简化了装饰器代码,而且可以快速地实现所需要的功能。同时,装 饰器为函数或类对象在增加功能时变得十分透明。对于同一函数来说,既可以添加简单的功 能,也可以添加复杂功能,并且使用起来很灵活。当调用被装饰的函数时,没有任何附加的 东西,仍然像调用原函数或没有被装饰的函数一样。

要想在 Python 程序中使用装饰器,需要使用一个特殊的符号“@”来实现。在定义装饰器 装饰函数或类时,使用“@装饰器名称”的形式将符号“@”放在函数或类的定义行之前。例如, 有一个装饰器名称为“run_time”, 当需要在函数中使用装饰器功能时,可以使用如下形式定义 这个函数。

在 Python 程序中使用装饰器后,例如上述代码定义的函数 han_fun() 可以只定义自己所 需的功能,而装饰器所定义的功能会自动插入函数han_fun) 中,这样就可以节约大量具有 相同功能的函数或类的代码。即使是不同目的或不同类的函数或类,也可以插入完全相同的 功能。

《Python学习笔记 从入门到实战》_更了解Python的途径之一_9.2 装饰器:拓展函数功能

要想用装饰器来装饰一个对象,必须先定义这个装饰器。在 Python 程序中,定义装饰 器的格式与定义普通函数的格式完全一致,只不过装饰器函数的参数必须要有函数或类对象, 然后在装饰器函数中重新定义一个新的函数或类,并且在其中执行某些功能前后或中间来使 用被装饰的函数或类,最后返回这个新定义的函数或类。

9.2.2 使用装饰器修饰函数

在 Python程序中,可以使用装饰器装饰函数。在使用装饰器装饰函数时,首先要定义 一个装饰器,然后使用定义的装饰器来装饰这个函数。例如在下面的实例代码中,演示了使 用装饰器修饰函数的过程。

实例9-5:比较装饰器函数和非装饰器函数 源码路径:下载包\daimal9\9-5

在上述实例代码中,首先定义了 一个装饰器函数zz(), 此函数有 一 个可以使用函数 对象的参数fun 。 然后定义了两个被装饰器装饰的普通函数,分别是 demo_decoration) 和 hello0 。 最后对被装饰的函数进行调用,当调用被装饰的函数时会发现,与调用普通函数没 有任何区别。而在实现装饰器定义的内部,很明显又定义了一个内嵌的函数 wrapper(), 在 这 个内嵌的函数中执行了一些语句,也调用了被装饰的函数。最后返回这个内嵌函数,并代替 了被装饰的函数,从而完成了装饰器的功能。执行后会发现在调用两个被装饰的函数前后都 输出了相应的信息的功能,执行后会输出:

比赛开始了...

[0,1,2,3,4]

比赛结束!

在上述实例中,其中装饰函数wrapper() 的参数是可变的,而被装饰函数 demo_decorationO 和 hello) 的参数是固定的。

在 Python 程序中,当对带参数的函数进行装饰时,内嵌包装函数的形参和返回值与原 函数相同,装饰函数返回内嵌包装函数对象。例如在下面的实例代码中,演示了使用装饰器 装饰带参函数的过程。

实例9-6:比较调用前后的执行结果

源码路径:下载包\daima\9\9-6

9.2.3 使用装饰器修饰类

在 Python 程序中,也可以使用装饰器来装饰类。在使用装饰器装饰类时,需要先定义 内嵌类中的函数,然后返回新类。例如在下面的实例代码中,演示了使用装饰器修饰类的 过程。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:达人之路·《高效办公应用宝典公式·函数与VBA》_1.0 公式和函数的基础知识
下一篇:达人之路·《高效办公应用宝典公式·函数与VBA》_4.3 数组之间的运算规则
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×