python装饰器作业
1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),
要求登录成功一次,后续的函数都无需再输入用户名和密码
# FALG = False # def login(user,passwprd): # with open('admin',mode='r',encoding='utf-8') as f: # if f.readline().strip()== user and f.readline().strip() == passwprd: # return True # return False # def wrapper(func): # def inner(*args,**kwargs): # global FALG # if FALG: # ret = func(*args,**kwargs) # else: # user = input("输入用户名") # password = input("输入密码") # if login(user,password): # print('登录成功') # ret = func(*args, **kwargs) # FALG =True # else : # print('登录失败') # return # return ret # return inner # @wrapper # def shop_add(): # print('增加一个商品') # @wrapper # def shop_del(): # print('删除一件商品') # shop_add() # shop_del() # shop_del() # shop_del()
2.编写装饰器,为多个函数加上记录调用功能,要求每次调用都将被调用的函数名写入文件
# def warpper(func): # def inner(*args,**kwargs): # with open('log',mode='a',encoding='utf-8') as f: # f.write(func.__name__+'\n') # ret = func(*args,**kwargs) # return ret # return inner # # @warpper # def shop_add(): # print('增加一个商品') # @warpper # def shop_del(): # print('删除一件商品') # shop_add() # shop_del() # shop_del() # shop_del()
3.编写下载网页内容函数,要求用户传入url,函数返回下载页的结果,并且编写装饰器。
具体要求:实现下载的页面存放文件中,如果文件中有值,就从文件中读取内容,否则下载至文件中。
# import os # from urllib.request import urlopen # def cache(func): # def inner(*args,**kwargs): # if os.path.getsize('cache'): # with open('cache',mode='rb') as f: # return f.read() # ret = func(*args,**kwargs) # with open('cache',mode='wb') as f: # f.write('******'.encode('utf-8')+ret) # return ret # return inner # # @cache # def get(url): # code = urlopen(url).read() # return code # ret = get("http://www.baidu.com") # print(ret) # ret = get("http://www.baidu.com") # print(ret)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用