Python“三大器”之装饰器1( 二 )
文章插图
方案三完美的解决了方案一和方案二遗留下的问题 , 此处的装饰器可以作为所有装饰器的模板
(*****)装饰器模板(记牢)
文章插图
def wrapper(func):def inner(*args, **kwargs):# *args **kwargs接收所有参数(形参 , 关键字参数等)# 调用被装饰对象 , 得到被装饰对象的返回值resres = func(*args, **kwargs)return resreturn inner
文章插图
装饰器简例:
文章插图
def wrapper(func):def inner(*args, **kwargs):'''在此处可以添加新添加的功能代码块'''# 调用被装饰对象 , 得到被装饰对象的返回值resres = func(*args, **kwargs)'''在此处也可以添加新添加的功能代码块'''return resreturn innerdef func1():print("hello")func1 = wrapper(func1)func1()
文章插图
代码执行顺序:
def为定义函数 , 不执行
先执行同级代码 , 再执行下级函数体代码
回到顶部
二、装饰器语法糖装饰器的语法糖 , 是属于装饰器的(语法糖是装饰器内置的 , 可以引用所有的语法糖)
@装饰器名字 装饰器的语法糖
注意:在使用装饰器语法糖时 , 装饰器必须定义在被装饰对象之上
例子:统计函数执行时间
不使用装饰器语法糖:
文章插图
import time# func函数执行三秒def func():time.sleep(3)# 装饰器:统计函数执行时间def wrapper(func):# func被装饰对象def inner(*args, **kwargs):# *args, **kwargs是被装饰对象的参数# 调用前增加新功能start_time = time.time()res = func(*args, **kwargs)# 调用前增加新功能end_time = time.time()print(f"程序执行时间为:{end_time - start_time}秒")return res# 调用被装饰对象 , 接收返回值return inner# 不使用装饰器语法糖func = wrapper(func)func()
文章插图
使用装饰器语法糖:
import time# 装饰器:统计函数执行时间def wrapper(func):# func被装饰对象def inner(*args, **kwargs):# *args, **kwargs是被装饰对象的参数# 调用前增加新功能start_time = time.time()res = func(*args, **kwargs)# 调用前增加新功能end_time = time.time()print(f"程序执行时间为:{end_time - start_time}秒")return res# 调用被装饰对象 , 接收返回值return inner# 使用装饰器语法糖:使用装饰器语法糖时 , 装饰器必须定义在被装饰对象之上@wrapper# @wrapper就等于--->func = wrapper(func)# func函数执行三秒def func():time.sleep(3)func()# 因为语法糖可直接调用
文章插图
import time# 装饰器:统计函数执行时间def wrapper(func):# func被装饰对象def inner(*args, **kwargs):# *args, **kwargs是被装饰对象的参数# 调用前增加新功能start_time = time.time()res = func(*args, **kwargs)# 调用前增加新功能end_time = time.time()print(f"程序执行时间为:{end_time - start_time}秒")return res# 调用被装饰对象 , 接收返回值return inner# 使用装饰器语法糖:使用装饰器语法糖时 , 装饰器必须定义在被装饰对象之上@wrapper# @wrapper就等于--->func = wrapper(func)# func函数执行三秒def func():time.sleep(3)func()# 因为语法糖可直接调用
推荐阅读
- 计算机专业大一下学期,该选择学习Java还是Python
- 想自学Python来开发爬虫,需要按照哪几个阶段制定学习计划
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 2021年Java和Python的应用趋势会有什么变化?
- 非计算机专业的本科生,想利用寒假学习Python,该怎么入手
- 用Python制作图片验证码,这三行代码完事儿
- 历时 1 个月,做了 10 个 Python 可视化动图,用心且精美...
- 为何在人工智能研发领域Python应用比较多
- 对于非计算机专业的同学来说,该选择学习Python还是C
- 学习完Python之后,如何向人工智能领域发展