装饰器练习
1.带有参数装饰器
2。带有多个参数的装饰器
需求: 用户登陆验证的装饰器is_login 1). 如果用户登陆成功, 则执行被装饰的函数; 2). 如果用户登陆不成功, 则执行登陆函数 需求: 判断登陆用户是否未管理员is_admin(此处管理员只有一个为:admin用户) 1).如果用户为管理员, 则执行被装饰的函数; 2).如果用户不是管理员, 则报错;
3.装饰器的需求:获取每个函数的执行时间 1).函数执行之前计算时间 2).函数执行之后计算时间 1.问题1:被装饰的函数有返回值的时候怎么办 2.问题2:如何保留被装饰函数的函数名和帮助文档信息
4. 升级版(有参数的装饰器) 编写装饰器required_types, 条件如下: 1). 当装饰器为@required_types(int,float)确保函数接收到的每一个参数都是int或者float类型; 2). 当装饰器为@required_types(list)确保函数接收到的每一个参数都是list类型; 3). 当装饰器为@required_types(str,int)确保函数接收到的每一个参数都是str或者int类型; 4). 如果参数不满足条件, 打印 TypeError:参数必须为xxxx类型 装饰器的概念 - 装饰器的实现是函数里面嵌套函数; - 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能; - 装饰器需要传递一个函数, 返回值也是一个函数对象. 装饰器的应用场景 - 计时器 - 记录日志 - 用户登录验证 - 函数参数验证
5.需求:验证用户登陆的装饰器is_login
1.如果用户登陆成功,则执行被装饰的函数
2.如果用户登陆不成功,则执行登陆函数
6.创建装饰器, 要求如下: 1. 创建add_log装饰器, 被装饰的函数打印日志信息; 2. 日志格式为: [字符串时间] 函数名: xxx, 运行时间:xxx, 运行返回值结果:xxx
6.编写装饰器required_ints, 条件如下: 1). 确保函数接收到的每一个参数都是整数; 2). 如果参数不是整形数, 打印 TypeError:参数必须为整形
7.编写装饰器required_ints, 条件如下: 1). 确保函数接收到的每一个参数都是整数; 2). 如果参数不是整形数, 打印 TypeError:参数必须为整形