Title1:请实现一个装饰器,每次调用函数时,将函数名字以及调用此函数的时间点写入文件中
代码:
python
import time
time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 获取当前的时间戳
# 定义一个有参装饰器来实现写入文件时加上时间和函数名
def tianjia(time):
def logo(func):
def wrapper():
with open("file.text", "w", encoding="utf-8") as f:
f.write(f"时间点{time},文件名:{func.__name__}\n")
res = func()
f.write(f"执行结果:{res}\n")
return wrapper
return logo
@tianjia(time)
def main():
print("Hello")
if __name__ == '__main__':
main()
Title2:编写一个装饰器,每执行一个函数,记录函数名称及函数执行时间,并写入log.text文件中
代码:
python
import time
def w_file_time(time):
def logo(func):
def wrapper():
with open("log.text", "a", encoding='utf-8') as f:
f.write(time.strftime("%Y-%m-%d:%H--%M--%S", time.localtime()) + "\n函数名称:" + w_file_time.__name__)
func()
return wrapper
return logo
@w_file_time(time)
def w_file():
with open('test.txt', 'a') as f:
f.write("这是一个函数")
if __name__ == '__main__':
w_file()
Title3:使用with语法完成文件的复制
代码:
python
with open("cope.text", 'a+', encoding='utf-8') as f, open("stickup.text", 'w+', encoding='utf-8') as t:
f.write("这是一个复制的文件") # 标识一下复制的文件
t.write("粘贴后:" + f.read()) # 把查看到的内容写入别名为t的文件中同时加上一段文件进行标识
print(t)
Title4:完成登录系统,登录时数据使用序列化和反序列化
代码:
python
import pickle
# 定义一个初始的用户列表,由于是登录验证有用户名和密码,所以里面的元素是字典
users_list = [
{"username": "John", "password": "123456"},
{"username": "lisi", "password": "123456"},
{"username": "wangwu", "password": "123456"},
]
# 打开文件进行序列化,是假设以上的users_list是在一个文件中的而不是在代码中
with open("user_list.text", "wb") as f:
pickle.dump(users_list, f)
# 定义一个装饰器使得登录的函数可以实现序列化和反序列化
def serialization(func):
def wrapper():
with open('user_list.text', 'rb') as file:
users = pickle.load(file)
func(users)
return wrapper
@serialization # 通过装饰器来使得简单的一个登录需要序列化和反序列化
# 定义一个登录的函数
def loging(users):
username = input("请输入你的用户名:")
password = input("请输入你的密码:")
# 判断用户名和密码是否与用户列表中的匹配
for user in users:
if user['username'] == username and user['password'] == password:
print('用户名和密码匹配成功')
break
else:
print('用户名和密码匹配不成功')
if __name__ == '__main__':
loging()