当前位置: 首页 > news >正文

python第五次作业

1.请实现一个装饰器,每次调用函数时,将函数名字以及调用此函数的时间点写入文件中
# 导入datetime模块,用于获取当前时间并格式化输出
import datetime# 定义一个装饰器工厂函数log_funcName_time,它接受一个参数time
def log_funcName_time(time):# 定义一个装饰器函数log_decorator,它将被用来装饰目标函数def log_decorator(func):# 定义一个包装器wrapper,它将替换原始函数的行为def wrapper(*args, **kwargs):# 首先调用原始函数,执行其功能func(*args, **kwargs)# 使用with语句打开文件"decorator.txt"以追加模式('a')with open("decorator.txt", "a") as f:# 向文件写入函数名和给定的时间点信息f.write(f"函数名:{func.__name__}----时间点:{time}\n")  # 添加换行符以便于阅读# 返回包装器函数,使其可以替代原函数return wrapper# 返回装饰器函数return log_decorator# 使用装饰器工厂函数log_funcName_time,传入当前时间(格式化为字符串)
@log_funcName_time(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
# 定义一个被装饰的函数test
def test():# 函数执行内容:打印一条消息指示操作完成print("已写入文件中")# 调用test函数,触发装饰器的行为
test()

2.编写一个装饰器,每执行一个函数,记录函数名称及函数执行时间,并写入log.text文件中
import timedef calculate_execution_time(func):"""这是一个装饰器,用于计算并打印被装饰函数的执行时间"""def wrapper(*args, **kwargs):start_time = time.time()  # 记录函数开始执行的时间res = func(*args, **kwargs)  # 执行函数end_time = time.time()  # 记录函数结束执行的时间execution_time = end_time - start_time  # 计算执行时间with open("log.txt", "a") as f:f.write(f"{func.__name__} 函数执行时间: {execution_time:.6f} 秒")return resreturn wrapper# 使用装饰器
@calculate_execution_time
def test(n):"""示例函数,执行一些操作"""total = 0for i in range(n):total += ireturn total# 调用示例函数
res = test(1000000)
print(f"结果: {res}")

3.使用with语法完成文件的复制
with open("file.txt", "r+") as f1, open("file_copy.txt", "r+") as f2:#打开文件f2.write(f1.read())#复制文件

4.完成登录系统,登录时数据使用序列化和反序列化
import pickle# 使用pickle模块对用户名和密码进行序列化模拟数据库中存储的状态
# 注意:真实场景中不应直接存储明文密码,此处仅为示例
username_mysql = pickle.dumps("zhangsan")  # 序列化用户名
password_mysql = pickle.dumps("123")      # 序列化密码# 定义一个装饰器login_serizl,用于序列化登录函数的参数
def login_serizl(func):# 定义内层函数wrapper,它会在装饰器被应用时替代原函数def wrapper(*args, **kwargs):# 获取传入的用户名和密码参数username, password = args  # 假设装饰的函数只接受两个位置参数# 对传入的用户名和密码进行序列化处理username = pickle.dumps(username)password = pickle.dumps(password)# 重新打包序列化后的参数,准备传递给被装饰的函数args = (username, password)  # 注意:此处直接赋值为元组,无需使用**解包# 调用被装饰的函数,并传递序列化后的参数,返回其执行结果return func(*args, **kwargs)# 返回装饰过的函数return wrapper# 使用装饰器login_serizl修饰login函数
@login_serizl
def login(username, password):# 打印接收到的(已序列化)用户名和密码,实际操作中应进行解序列化比较print(username, password)# 模拟验证过程,比较序列化的输入与预设的序列化数据库值# 注意:此处比较逻辑应先进行反序列化,这里为了简化直接比较序列化后的值return "success" if username == username_mysql and password == password_mysql else "failure"# 主程序入口
if __name__ == '__main__':# 从用户处获取输入的用户名和密码username = input("请输入用户名:").strip()password = input("请输入密码:").strip()# 调用login函数进行登录验证,装饰器会自动处理参数序列化result = login(username, password)# 打印登录结果print(result)

相关文章:

  • 计算机组成原理·海明编码及其实验
  • 嵌入式开发—C++使用websocketpp 创建WebSocket服务器,并向浏览器发送图片
  • springboot从2.7.2 升级到 3.3.0
  • Golang:使用embed引入静态文件
  • 【Uniapp微信小程序】自定义水印相机、微信小程序地点打卡相机
  • Vue CLI:Vue CLI是一个强大的工具,可以帮助开发者快速地创建和管理Vue项目。我们可以讨论它的一些核心特性,比如热重载、懒加载等
  • 【云原生】kubernetes中pod的生命周期、探测钩子的实战应用案例解析
  • C++入门5——C/C++动态内存管理(new与delete)
  • 使用 C++ 在当前进程中获取指定模块的基址
  • HackTheBox-Machines--Sense
  • 标题:Go语言中的YAML魔法:轻松配置你的环境
  • Python打印当前目录下,所有文件名的首字母
  • Centos7安装Docker和DockerCompose
  • DynamiCrafter ComfyUI 教程 | 对图片转视频的效果进行精细化控制
  • Spark_SparkOnHive_海豚调度跑任务写入Hive表失败解决
  • avalon2.2的VM生成过程
  • CSS 提示工具(Tooltip)
  • Docker下部署自己的LNMP工作环境
  • Flannel解读
  • Java知识点总结(JavaIO-打印流)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • JS数组方法汇总
  • Python socket服务器端、客户端传送信息
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • FaaS 的简单实践
  • Python 之网络式编程
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​​​​​​​​​​​​​​Γ函数
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • $refs 、$nextTic、动态组件、name的使用
  • (2)STL算法之元素计数
  • (PADS学习)第二章:原理图绘制 第一部分
  • (ZT)出版业改革:该死的死,该生的生
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (六)软件测试分工
  • (七)Knockout 创建自定义绑定
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (算法)硬币问题
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)Thymeleaf用法——Thymeleaf简介
  • (源码分析)springsecurity认证授权
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • ./configure、make、make install 命令
  • .bat批处理(一):@echo off
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • .Net中间语言BeforeFieldInit
  • /etc/motd and /etc/issue