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)
复制代码

 

posted @   ‘哦耶’  阅读(191)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 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 构建精确任务处理应用
点击右上角即可分享
微信分享提示