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()# 因为语法糖可直接调用
- 第2天 | 12天搞定Python,运行环境(详细步骤)
- Python高级技巧:用一行代码减少一半内存占用
- 手把手教你用python编程写一款自己的音乐下载器
- Python爬虫入门第一课:如何解析网页
- 刷爆全网的动态条形图,只需5行Python代码就能实现
- 让你的输出变得更帅,Python炫酷的颜色输出与进度条打印
- 斐波那契数列:python实现和可视化
- Python 3.9 正式发布!一图秒懂新特性
- Python解决同步验证码模拟登录问题
- Python爬取lol英雄联盟全阵容皮肤