首页 > 代码库 > 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装饰器作业(最后一题待补充)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。