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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中应用

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中的应用 由北京海特伟业科技有限公司任洪卓发布于2024年6月1日 红外语音听力广播(即红外听力教学考试系统)在英语四六级听力考试的应用正日益凸显出其重要性和优越性。在当前的高等教育…

xcode删除依赖包package,删除不必要的依赖项

点击项目,然后点击PROJECT项里面的Package DepenDependencies: 选中一个依赖项,然后点击减号,就可以把依赖项删除掉了,左侧项目下面的Package已经没有了这个依赖项 TARGET下面的package也要删除:在这里删除…

【C++】【Windows】程序加载DLL库时依次查找哪些目录

搜索的顺序通常如下: 应用程序目录:首先,系统会在包含可执行文件(EXE)的目录中查找DLL。系统目录:接下来,系统会在Windows系统目录中查找,比如 C:\Windows\System32。16位系统目录&…

人工智能与未来工作:未来已来,你准备好了吗?

1. 引言 随着人工智能技术的飞速发展,它正在逐渐渗透到我们生活的方方面面,尤其是工作领域。本文将探讨人工智能的基本概念,它在不同行业的应用,以及它对未来就业市场和教育体系可能带来的影响。 2. 人工智能的基本概念 2.1 定…

ESP32S3外设学习笔记

GPIO ESP32的GPIO(通用输入输出)引脚非常灵活,支持多种工作模式。这些模式可以通过编程来配置,以适应不同的应用需求。以下是ESP32 GPIO引脚的主要工作模式: 1. 输入模式 普通输入模式:在这种模式下&…

dubbo复习:(14)通过上下文传递附加数据

服务调用和响应时,除了请求的方法和返回的响应,还可以通过上下文(Context)传递更多的数据(附加数据) 一、接口定义 package cn.edu.tju.service;public interface ContextService {String invoke(String param); }二、服务端接口实现&#x…

OA前端用什么开发:深入探索技术选型与最佳实践

OA前端用什么开发:深入探索技术选型与最佳实践 在开发OA(办公自动化)系统的前端时,技术选型是至关重要的一步。它不仅决定了系统的外观和用户体验,还直接影响到系统的性能、安全性和可维护性。本文将从四个方面、五个…

nuxt3 api如何透传(不引第3方库)

背景: nuxt做为一个vue的服务端渲染框架,本身就具备服务端的功能,理论上可以完整做一个系统功能,包括对数据库等等操作,但更合理的做法是nuxt应该定位只做服务端渲染的事情,更偏向ui层面,而非数…

大数据分析统计

大数据分析统计 from datetime import datetimeimport pandas as pd import matplotlib.pyplot as pltpm25files [PM2.5_2021.csv, PM2.5_2022.csv, PM2.5_2023.csv] pm10files [PM10_2021.csv, PM10_2022.csv, PM10_2023.csv]def read_csv_file(files):# 每个文件都有表头…

C++之类(class)的三种成员修饰符(public、private、protected)总结

1、背景介绍 在C中,类(class)中成员的三种访问修饰符(access specifiers)用于控制类的成员(属性和方法)的访问权限。这些修饰符决定了类成员在类的外部和内部是否可以被访问。以下是这三种访问…

macOS上编译android的ffmpeg及ffmpeg.c

1 前言 前段时间介绍过使用xcode和qt creator编译调试ffmepg.c,运行平台是在macOS上,本文拟介绍下android平台如何用NDK编译链编译ffmepg库并使用。 macOS上使用qt creator编译调试ffmpeg.c macOS上将ffmpeg.c编译成Framework 大体思路: 其…

信息学奥赛初赛天天练-18-挑战程序阅读-最长公共子序列、字符串与数组越界的巧妙应用

PDF文档公众号回复关键字:20240601 1 2023 CSP-J 阅读程序2 阅读程序(程序输入不超过数组成字符串定义的范围:判断题正确填√,错误填;除特殊说明外,判断题1.5分,选择题3分,共计40分&#xff…

从创意到成功:创业全过程详解

目录 创业目标市场的选择和分析用户画像的描绘软件产品的核心功能和价值主张竞争对手分析及自身竞争优势目标用户的具体需求调研初步的产品设计思路或框架技术栈的选择基于哪些考量如何规划产品的迭代路线图预计的商业模式 1. 创业目标市场的选择和分析 市场选择的重要性 创…

YOLOv10涨点改进:IoU优化 | Powerful-IoU更好、更快的收敛IoU,效果秒杀CIoU、GIoU等 | 2024年最新IoU

💡💡💡本文独家改进:Powerful-IoU更好、更快的收敛IoU,是一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的损失函数 💡💡💡MS COCO和PASCAL VOC数据集实现涨点 《YOLOv10魔术师专栏》将从以下各个方向进行创新: 【原创自研模块】【多组合点优…

spark SQL优化器catalyst学习

一、Catalyst 概述 Catalyst 是 Spark SQL 的优化器,它负责将 SQL 查询转换为物理执行计划。Catalyst 优化器的目标是生成高效的执行计划,以最小化查询的执行时间。它使用了多种优化技术,包括基于规则的优化、基于代价的优化和动态规划等。我…

Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言: Dijkstra算法博客讲解分为两篇讲解,这两篇博客对所有有难点的问题都会讲解,小白也能很好理解。看完这两篇博客后保证收获满满。 第一篇博客讲解朴素Dijkstra算法Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(p…

openstack 中如何检查VLAN 配置: 确保正确配置了两个 VLAN,并且两个 VLAN 之间进行了正确的路由。

在 OpenStack 中检查 VLAN 配置并确保两个 VLAN 之间进行了正确的路由,可以按照以下步骤进行操作: 查看网络配置: 登录到 OpenStack 控制节点上的命令行界面。使用 neutron net-list 命令查看当前存在的网络列表。找到与你关注的 VLAN 相关的…

计网ppt标黄知识点整理第(2)章节——谢希仁版本、期末复习自用

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。4 个特性: 机械特性:指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。 电气特性:指明在接口电缆的各条线上出现…

如何在 JS 中快速读取文件

本文翻译自 How to read files quickly in JavaScript,作者:Daniel Lemire, 略有删改。 假设你需要在服务器上使用JavaScript读取多个文件。在像Node.js这样的运行时环境中,JavaScript有多种读取文件的方式。哪一种是最好的呢&…

Linux软件安装包rpm与tgz格式的区别

rpm与tgz的区别 1、Linux软件包的内容分类2、Linux软件包的格式分类 1、Linux软件包的内容分类 Linux应用程序的软件包按内容类别可分为两类: 可执行文件(编译后的二进制软件包) 解包后可以直接运行,看不到源代码。例如&#xff0…