首页 / PYTHON / Python装饰器 (1)
Python装饰器 (1)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python装饰器 (1),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2087字,纯文字阅读大概需要3分钟。
内容图文
![Python装饰器 (1)](/upload/InfoBanner/zyjiaocheng/617/aac6cb4ceed5449a8d8b719704b8e509.jpg)
Python装饰器
1. 装饰器的定义
就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数。
装饰器的功能特点:
- 不修改已有函数的源代码
- 不修改已有函数的调用方式
- 给已有函数增加额外的功能
2. 装饰器的示例代码:
# 添加一个登录验证的功能
def check(fn):
def inner():
print("请先登录....")
fn()
return inner
def comment():
print("发表评论")
# 使用装饰器来装饰函数
comment = check(comment)
comment()
'''
执行结果
请先登录....
发表评论
'''
# 装饰器的基本雏形
# def decorator(fn): # fn:目标函数.
# def inner():
# '''执行函数之前'''
# fn() # 执行被装饰的函数
# '''执行函数之后'''
# return inner
代码说明:
闭包函数有且只有一个参数,必须是函数类型,这样定义的函数才是装饰器。
写代码要遵循开放封闭原则,它规定已经实现的功能代码不允许被修改,但可以被扩展。
3. 装饰器的语法糖写法
如果有多个函数都需要添加登录验证的功能,每次都需要编写func = check(func)这样代码对已有函数进行装饰,这种做法还是比较麻烦。
Python给提供了一个装饰函数更加简单的写法,那就是语法糖,语法糖的书写格式是: @装饰器名字,通过语法糖的方式也可以完成对已有函数的装饰
# 添加一个登录验证的功能
def check(fn):
def inner():
print("请先登录....")
fn()
return inner
# 使用语法糖方式来装饰函数
@check
def comment():
print("发表评论")
comment()
'''
执行结果
请先登录....
发表评论
'''
说明:
@check 等价于 comment = check(comment)
装饰器的执行时间是加载模块时立即执行。
4. 小结
装饰器本质上就是一个闭包函数,它可以对已有函数进行额外的功能扩展。
装饰器的语法格式:
# 装饰器
def decorator(fn): # fn:被装饰的目标函数.
def inner():
'''执行函数之前'''
fn() # 执行被装饰的目标函数
'''执行函数之后'''
return inner
装饰器的语法糖用法: @装饰器名称,同样可以完成对已有函数的装饰操作。
5,代码实例:
装饰器实现已有函数执行时间的统计
import time
def get_time(func):
start_time = time.time()
func()
end_time = time.time()
run_time = end_time - start_time
print('函数的执行时间是%s'%run_time)
return get_time
@get_time
def test():
i = 0
for i in range(10000):
print(i)
i += 1
'''
执行结果
0
1
2
3
...
9996
9997
9998
9999
函数的执行时间是0.07971668243408203
'''
通过上面的示例代码可以得知装饰器的作用:
在不改变已有函数源代码及调用方式的前提下,对已有函数进行功能的扩展。
内容总结
以上是互联网集市为您收集整理的Python装饰器 (1)全部内容,希望文章能够帮你解决Python装饰器 (1)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。