首页 > 代码库 > day7装饰器作业(最后一题待补充)

day7装饰器作业(最后一题待补充)

# 一:编写函数,(函数执行的时间是随机的)import timeimport random# def foo():#     time.sleep(random.randrange(1,5))#     print(‘haha‘)# foo()# 二:编写装饰器,为函数加上统计时间的功能# def timmer(func):#     def wrapper():#         start_time=time.time()#         func()#         stop_time=time.time()#         print(‘run time is %s‘%(stop_time-start_time))#     return wrapper# @timmer# def foo():#     time.sleep(random.randrange(1,5))#     print(‘haha‘)# foo()# 三:编写装饰器,为函数加上认证的功能# def auth(func):#     def deco():#         name=input(‘name: ‘)#         pwd=input(‘password: ‘)#         if name==‘egon‘ and pwd==‘123‘:#             print(‘login successful‘)#             func()#         else:#             print(‘login erro‘)#     return deco# @auth# def foo():#     time.sleep(random.randrange(1,5))#     print(‘haha‘)# foo()# 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码#     注意:从文件中读出字符串形式的字典,可以用eval(‘{"name":"egon","password":"123"}‘)转成字典格式# user_dic={#     ‘egon‘:‘123‘,#     ‘alex‘:‘alex3714‘,#     ‘wupeiqi‘:‘wu13‘,#     ‘yuanhao‘:‘123123‘# }# with open(‘db.txt‘,‘w‘,encoding=‘utf-8‘) as f:#     f.write(str(user_dic))# with open(‘db.txt‘,‘r‘,encoding=‘utf-8‘) as f:#     res=f.read()#     #print(res,type(res))#字符串类型#     user_dic=eval(res)#     #print(user_dic,type(user_dic))#字典类型# db_path=‘db.txt‘# login_dic={#     ‘user‘:None,#     ‘status‘:False,# }# def auth(func):#     def wrapper(*args,**kwargs):#         if login_dic[‘user‘] and login_dic[‘status‘]:#             res = func(*args, **kwargs)#             return res#         name=input(‘your name: ‘)#         password=input(‘your password: ‘)#         with open(db_path,‘r‘,encoding=‘utf-8‘) as f:#             user_dic=eval(f.read())#         if name in user_dic and password == user_dic[name]:#                 print(‘login ok‘)#                 login_dic[‘user‘]=name#                 login_dic[‘status‘]=True#                 res=func(*args,**kwargs)#                 return res#         else:#             print(‘login err‘)#     return wrapper# @auth #auth(index)# def index():#     print(‘welecome to index‘)# @auth# def home(name):#     print(‘welecome %s to home page‘ %name)# index()# home(‘egon‘)# 五:编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果# from urllib.request import urlopen# def index(url):#     def get():#         return urlopen(url).read()#     return get# python = index(‘https://www.python.org‘)# print(python())# 六:为题目五编写装饰器,实现缓存网页内容的功能:#     具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),# 就优先从文件中读取网页内容,否则,就去下载,然后存到文件中# from urllib.request import urlopen# import os# cache_path=r‘C:\Users\Administrator\PycharmProjects\python5期\day8\cache.txt‘# def make_cache(func):#     def wrapper(*args,**kwargs):#         if os.path.getsize(cache_path):#             #有缓存,文件不为空#             print(‘\033[45m=========>有缓存\033[0m‘)#             with open(cache_path,‘rb‘) as f:#                 res=f.read()#         else:#             res=func(*args,**kwargs) #下载#             with open(cache_path,‘wb‘) as f: #制作缓存#                 f.write(res)#         return res#     return wrapper# @make_cache# def get(url):#     return urlopen(url).read()# print(‘================>first‘)# print(get(‘https://www.python.org‘))# print(‘================>second‘)# print(get(‘https://www.python.org‘))# print(‘================>third‘)# print(get(‘https://www.python.org‘))# 七:还记得我们用函数对象的概念,制作一个函数字典的操作吗,# 来来来,我们有更高大上的做法,在文件开头声明一个空字典,# 然后在每个函数前加上装饰器,完成自动添加到字典的操作# func_dic = {}# def deco(key):#     def deco2(func):#         func_dic[key]=func#     return deco2# @deco(‘f1‘)#@deco2  func1=deco2(func1)# def func1():#     print("from f1")# @deco(‘f2‘)# def func2():#     print("from f2")# @deco(‘f3‘)# def func3():#     print("from f3")# print(func_dic)# while True:#     cmd=input(‘>>: ‘).strip()#     if cmd in func_dic:#         func_dic[cmd]()

 

day7装饰器作业(最后一题待补充)