徐州哪家做网站好,手机网站推荐大全,有网站怎么做seo推广,软件设计公司排名1.请实现一个装饰器#xff0c;每次调用函数时#xff0c;将函数名字以及调用此函数的时间点写入文件中
# 导入datetime模块#xff0c;用于获取当前时间并格式化输出
import datetime# 定义一个装饰器工厂函数log_funcName_time#xff0c;它接受一个参数time
def log_fu…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)