python-17-装饰器形成固定模型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-17-装饰器形成固定模型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2199字,纯文字阅读大概需要4分钟。
内容图文
![python-17-装饰器形成固定模型](/upload/InfoBanner/zyjiaocheng/649/aeb92e2ddb0e4705b29d6252aa2bddc9.jpg)
前言
装饰器可能有点陌生,但是装饰器它也是由函数而组成,那它有什么作用呢?
其实就是:不想修改函数的调用方式,但可在原来的函数前后添加功能。开放封闭原则:
- 对扩展是开放的
- 对修改是封闭的
一、装饰器初成
1、还是这个例子,定义两个函数,func、timmer,简单来说 func 是执行所需的时间,timmer 是来计算传入的参数执行时长。
2、可以看到timmer函数里面有一个被装饰的函数。既是 func 传入 timmer。
# 1.装饰器初成 import time def func(): time.sleep(1) print('我在等待一秒钟') def timmer(f): # 装饰器函数 def inner(): start = time.time() f() # 被装饰函数 end = time.time() print(end-start) return inner # 别加 () 调用函数了,应传内部函数名字 ff = timmer(func) ff()
3、运行步骤如下图
二、装饰器使用
1、装饰器函数 timmer
2、被装饰函数 func,直接@装饰器函数,执行顺序如上图所示。
# 2.装饰器使用 import time def timmer(f): def inner(): start = time.time() ret = f() end = time.time() return end-start, ret return inner @timmer # @装饰器函数名 def func(): # 被装饰的函数 time.sleep(1) return '我在等待一秒钟' print(func())
三、万能参数装饰器
1、万能传参,其实就是用我们前面所学的函数传参方法,*args 和 **kwargs
# 3.万能参数装饰器 import time def timmer(f): def inner(*args, **kwargs): # *args, **kwargs 万能接收参数 start = time.time() ret = f(*args, **kwargs) # *args, **kwargs 万能传入参数 end = time.time() print(end-start) return ret return inner @timmer def func(a, b): print(a, b) time.sleep(1) return '我在等待一秒钟' @timmer def func1(a): print(a) time.sleep(1) return '我在等待一秒钟' print(func(1, 2)) print(func1(1))
四、装饰器固定模式
1、装饰器这样我们就可以游刃有余的写:在被装饰函数之 前 、后 要做的功能了。
2、固定模式如下:
# 4.装饰器固定模式 def wrapper(f): # 装饰器函数:wrapper 被装饰函数:f def inner(*args, **kwargs): # 被装饰函数:inner == f # 在被装饰函数之 前 要做的功能 ret = f(*args, **kwargs) # 在被装饰函数之 后 要做的功能 return ret return inner @wrapper # @装饰器函数,实际相当于:wrapper(fon) def fon(a): print('打酱油') return a r = fon('固定模式就是这样') # 实际相当于调用:inner print(r)
有没有装饰器都不会影响原函数的执行,只是能够对现有的进行 前后 扩展,是不是很有必要掌握好的技能呢?
如有更多欢迎来QQ交流群:482713805
内容总结
以上是互联网集市为您收集整理的python-17-装饰器形成固定模型全部内容,希望文章能够帮你解决python-17-装饰器形成固定模型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。