一、装饰器的定义
把一个函数当做参数,返回一个替代版的函数,本质上就是一个返回函数的函数。
“在不改变原函数的基础上,给函数增加功能”
二、示例
(1)
结果:
(2)
结果:
三、练习
(1)用装饰器实现一个函数计时器(函数运行时间)
比较列表生成式和高阶函数运行快慢
被装饰的函数有返回值
部分结果:
(2)创建装饰器,要求如下:
创建add_log装饰器,被装饰的函数打印日志信息;
日志格式为:[字符串时间] 函数名: xxx ,运行时间:xxx,运行返回值结果:xxx
结果:
(3)编写装饰器required_types,条件如下:
当装饰器为@required_types(int,float)确保函数接收到的每一个参数都是int或者float类型;
当装饰器为@required_types(list)确保函数接收到的每一个参数都是list类型;
当装饰器为@required_types(str,int)确保函数接收到的每一个参数都是str或者int类型;
如果参数不满足条件时,打印TypeError:参数必须为xxx类型
结果:
(4)一个函数可以有多个装饰器
结果: