1、整理装饰器的形成过程,背诵装饰器的固定格式
固定格式 def wrapper(func): 2.传入函数值f def inner(*args, **kwargs): #执行函数前进行的操作 ret = func(*args,**kwargs) # 5.执行f()函数 #执行函数后进行的操作 return ret # 6.返回一个值给函数调用者 inner函数名的id return inner # 4.通过return把返回值给函数调用者 此时f = inner @wrapper # 1.f = wrapper(f)执行wrapper函数 def f(): print(666) f() 3.执行inner函数 f() = inner() 注意:return用法 1.函数遇到return时函数体结束 2.如果return后面跟上函数名则返回函数名在内存中的id 3.如果return后面跟上其他字符则返回其本身
2、编写装饰器,在每次执行被装饰函数之前打印一句’每次执行被装饰函数之前都得先经过这里,这里根据需求添加代码
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
3、编写装饰器,在每次执行被装饰函数之后打印一句’每次执行完被装饰函数之后都得先经过这里,这里根据需求添加代码
def func1(f): def inner(): f() print('每次执行被装饰函数之后都得先经过这里,这里根据需求添加代码') return inner @func1 def func2(): print('hello world') func2()
4、编写装饰器,在每次执行被装饰函数之前让用户输入用户名,密码,给用户三次机会,登录成功之后,才能访问该函数.
def func2(f): def innter(): a = 1 while a <= 3: username = input('请输入用户名') password = input('请输入密码') if username == 'jinyuan' and password == '123': f() break else: print('账号密码错误你还有{}次机会'.format(3-a)) a += 1 continue return innter @func2 def func1(): print('登录成功') func1()
5、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件,只支持单用户的账号密码,给用户三次机会),
要求登录成功一次,后续的函数都无需再输入用户名和密码
dic = { 'name':None, 'status' : False } def func1(f): def inner(*args,**kwargs): num = 0 while num < 3: if dic['status']: ret = f(*args,**kwargs) return ret else: username = input('请输入用户名') password = input('请输入密码') f1 = open('test.txt',encoding='utf-8') for i in f1: new_list = i.strip().split() if username == new_list[0] and password == new_list[1]: dic['status'] = True break else: num += 1 print('输入用户名或密码错误还有{}次机会'.format(3-num)) continue return inner @func1 def func4(): print('登录成功') func4()
6,给每个函数写一个记录日志的功能,
功能要求:每一次调用函数之前,要将函数名称,时间节点记录到log的日志中。
所需模块:
import time
struct_time = time.localtime()
print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time))
import time def wapper(f): def inner(*args,**kwargs): struct_time = time.localtime() time_log = time.strftime("%Y-%m-%d %H:%M:%S",struct_time) f1 = open('log1.txt',encoding='utf-8',mode='a') f1.write(time_log+' ') f1.write(str(f)+' ') f(*args,**kwargs) return inner @wapper def func1(*args,**kwargs): print('hello world') func1('aa','bbb')