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()
运行结果:
这就是一个简单的登录系统,其实还可以在存储用户密码时,可以使用哈希函数进行加密处理,这样即使用户文件被泄露,也不会暴露用户的真实密码。但是我没想出来。