Python第五次作业

1.请实现一个装饰器,每次调用函数时,将函数名字以及调用此函数的时间点写入文件中

运行代码:

python 复制代码
import time


# 定义了装饰器函数 wrapper
def wapper(func):
    # 定义包装函数,接受被装饰的函数参数
    def inner(*args, **kwargs):
        # 指定了文件编码为 UTF-8
        with open("log",encoding="utf-8",mode="a+") as f:
            structime = time.localtime()
            # 获取当前时间
            f.write(f'北京时间:{time.strftime("%Y-%m-%d %H:%M:%S", structime)} 函数名字为:{func.__name__}\n')
        # 调用被装饰的函数,并将返回值保存ret中
        ret = func(*args, **kwargs)
        return ret

    return inner


@wapper
def func():
    print("函数1")


# 调用被装饰的函数
func()

运行结果:

2.编写一个装饰器,每执行一个函数,记录函数名称及函数执行时间,并写入log.text文件中

运行代码:

python 复制代码
import time
from datetime import datetime
import logging


# 定义装饰器函数output
def output(func):
    # 定义内部函数wrapper
    def wrapper(*args, **kwargs):
        # 输出函数名称
        logging.warning('{}函数正在执行'.format(func.__name__))
        # 函数开始执行的时间
        startTime = time.time()
        # 调用被装饰的函数,并获取返回值
        fun = func(*args, **kwargs)
        # 函数执行结束的时间
        endTime = time.time()
        print('执行时间:%.6f' % (endTime - startTime))
        return fun

    # 返回内部函数
    return wrapper


@output
def func():
    time.sleep(2)
    print("函数2")


func()

运行结果:

3.使用with语法完成文件的复制

运行代码:

python 复制代码
with open("test.txt", "r+") as f1, open("test_copy.txt", "r+") as f2:  # 打开文件
    f2.write(f1.read())  # 复制文件

运行结果:

4.完成登录系统,登录时数据使用序列化和反序列化

运行代码:

python 复制代码
import pickle


class User:
    def __init__(self, username, password):
        self.username = username
        self.password = password


def register(username, password):
    user = User(username, password)
    with open("users.txt", "ab") as file:
        pickle.dump(user, file)
    print("注册成功!")


def login(username, password):
    with open("users.txt", "rb") as file:
        while True:
            try:
                user = pickle.load(file)
                if user.username == username:
                    if user.password == password:
                        print("登录成功!")
                        return
                    else:
                        print("密码错误!")
                        return
            except EOFError:
                break
    print("用户不存在!")


def main():
    # 注册新用户
    register("test1", "123456")
    register("test2", "519401")

    # 尝试登录
    username = input("请输入用户名:")
    password = input("请输入密码:")
    login(username, password)


if __name__ == "__main__":
    main()

运行结果:

这就是一个简单的登录系统,其实还可以在存储用户密码时,可以使用哈希函数进行加密处理,这样即使用户文件被泄露,也不会暴露用户的真实密码。但是我没想出来。

相关推荐
Willliam_william14 分钟前
Python学习之路(5)— 使用C扩展
c语言·python·学习
余生H19 分钟前
前端Python应用指南(五)用FastAPI快速构建高性能API
前端·python·fastapi
2301_8010741526 分钟前
ArkTs组件(2)
开发语言·前端·华为·harmonyos
yep吖27 分钟前
Datawhale-AI冬令营二期
开发语言·javascript·ecmascript
L.S.V.1 小时前
Java 溯本求源之基础(三十一)——泛型
java·开发语言
Redamancy_Xun1 小时前
开源软件兼容性可信量化分析
java·开发语言·程序人生·网络安全·测试用例·可信计算技术
B站计算机毕业设计超人1 小时前
计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群
大数据·python·机器学习·spark·课程设计·数据可视化·推荐算法
ZLRRLZ1 小时前
【C++】多态
开发语言·c++
计算机徐师兄1 小时前
Python基于Django的web漏洞挖掘扫描技术的实现与研究(附源码,文档说明)
python·django·漏洞扫描·web漏洞挖掘扫描·python django·python漏洞挖掘扫描技术
m0_748246611 小时前
【论文投稿】Python 网络爬虫:探秘网页数据抓取的奇妙世界
开发语言·爬虫·python