您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python装饰器decorator用法实例

5b51 2022/1/14 8:18:21 python 字数 5284 阅读 338 来源 www.jb51.cc/python

本文实例讲述了Python装饰器decorator用法。分享给大家供大家参考。具体分析如下:

概述

本文实例讲述了Python装饰器decorator用法分享给大家供大家参考。具体分析如下:

1. 闭包(closure)

闭包是Python所支持的一种特性,它让在非global scope定义的函数可以引用其外围空间中的变量,这些外围空间中被引用的变量叫做这个函数的环境变量。环境变量和这个非全局函数一起构成了闭包。

装饰器是一个调用对象(a callable),在Python中,函数是对象,当然也是可调用的,所以装饰器可以是一个函数,我们称其为函数装饰器。
这个可调用对象以一个函数作为参数,闭且返回另一个函数(来替换参数那个函数)。
比如:

@操作符

Python提供的@符号,实质上就是上面做的,对一个函数名进行从新赋值,是语法上的技巧。所以上面的代码等价于

从这个刻意构造的很简单的例子,可以看出装饰器的意义,如果一个函数需要一个功能,如果这个功能可以被使用在很多函数上,或是函数并不是自己实现,那可以写个装饰器来实现这些功能
上面的装饰器entrance,装饰一个函数后,函数调用时会打印出这个函数的名字。
但是有一个问题,这个装饰器从功能上看,是要应该可以用来装饰任何函数,但是如果我们用它来装饰了一个带参数的函数

Traceback (most recent call last):
File “decorator.py”,line 23,in www.jb51.net <module>
fun3(1)
TypeError: inner() takes no arguments (1 given)

当然我们已经很容易知到为什么会这样报错了,fun3已经不是指向它定义时那个函数了,它现在指向了”inner()”,而inner是没有参数的,当然会出错。
那怎么解决呢?
修改一下inner()的定义,让它可以就收任意个参数就可以了。

3. 写个装饰器logger

一个函数调用时,在日志里记录其名称和被调用的实际参数

希望本文所述对大家的Python程序设计有所帮助。

总结

以上是编程之家为你收集整理的Python装饰器decorator用法实例全部内容,希望文章能够帮你解决Python装饰器decorator用法实例所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶