不为失败找理由,只为成功找方法。所有的不甘,因为还心存梦想,所以在你放弃之前,好好拼一把,只怕心老,不怕路长。

python系列之文件操作:让程序拥有"记忆"的超能力!

    • 一、项目概述:智能个人任务管理系统
    • 二、项目结构
    • 三、完整代码实现
      • 1. models.py - 数据模型
      • 2. storage.py - 数据存储
      • 3. utils.py - 工具函数
      • 4. main.py - 主程序
    • 四、运行效果
    • 五、项目功能说明
    • 如何运行
    • 学习要点
    • 六、扩展建议

python系列前期章节

  1. python系列之注释与变量
  2. python系列之输入输出语句与数据类型
  3. python系列之运算符
  4. python系列之控制流程语句
  5. python系列之字符串
  6. python系列之列表
  7. python系列之元组
  8. python系列之字典
  9. python系列之集合
  10. python系列之函数基础
  11. python系列之函数进阶
  12. python系统之综合案例1:用python打造智能诗词生成助手
  13. python系列之综合案例2:用python开发《魔法学院入学考试》文字冒险游戏
  14. python系列之类与对象:面向对象编程(用造人计划秒懂面向对象)
  15. python系列之类与对象:python系列之详解面向对象的属性)
  16. python系列之详解面向对象的函数
  17. python系列之面向对象的三大特性
  18. python系列之异常处理:给代码穿上“防弹衣”
  19. python系列之文件操作:让程序拥有“记忆“的超能力!”

在前面的章节中,我们已经学习了很多关于python的知识点,所以本章将在我们所学的知识里做一个小项目。此项目它结合了面向对象编程、异常处理、文件操作等知识点,帮助你巩固所学内容并深入理解技术应用。

一、项目概述:智能个人任务管理系统

这是一个命令行界面的任务管理应用,可以帮助用户创建、组织、跟踪和完成任务。项目将展示以下Python特性:

  • 面向对象编程(类、继承、封装)
  • 异常处理
  • 文件操作(JSON格式存储)
  • 日期时间处理
  • 命令行界面设计

二、项目结构

task_manager/
├── main.py          # 主程序入口
├── models.py        # 数据模型(任务、项目等类)
├── storage.py       # 数据存储处理
├── utils.py         # 工具函数
└── tasks.json       # 任务数据文件(自动生成)

三、完整代码实现

1. models.py - 数据模型

from datetime import datetime, timedelta
import reclass Task:"""任务类"""def __init__(self, title, description="", due_date=None, priority=1, project=None, tags=None):self.title = titleself.description = descriptionself.due_date = due_dateself.priority = priority  # 1-5,5为最高优先级self.project = projectself.tags = tags or []self.completed = Falseself.created_at = datetime.now()self.completed_at = Noneself.id = self._generate_id()def _generate_id(self):"""生成唯一ID"""timestamp = int(datetime.now().timestamp() * 1000)return f"task_{timestamp}"def mark_complete(self):"""标记任务为完成"""self.completed = Trueself.completed_at = datetime.now()def mark_incomplete(self):"""标记任务为未完成"""self.completed = Falseself.completed_at = Nonedef is_overdue(self):"""检查任务是否过期"""if not self.due_date or self.completed:return Falsereturn datetime.now() > self.due_datedef days_until_due(self):"""返回距离截止日期的天数"""if not self.due_date or self.completed:return Nonedelta = self.due_date - datetime.now()return delta.daysdef to_dict(self):"""将任务转换为字典(用于JSON序列化)"""return {"id": self.id,"title": self.title,"description": self.description,"due_date": self.due_date.isoformat() if self.due_date else None,"priority": self.priority,"project": self.project,"tags": self.tags,"completed": self.completed,"created_at": self.created_at.isoformat(),"completed_at": self.completed_at.isoformat() if self.completed_at else None}@classmethoddef from_dict(cls, data):"""从字典创建任务(用于JSON反序列化)"""task = cls(title=data["title"],description=data.get("description", ""),priority=data.get("priority", 1),project=data.get("project"),tags=data.get("tags", []))task.id = data["id"]task.completed = data["completed"]task.created_at = datetime.fromisoformat(data["created_at"])if data["due_date"]:task.due_date = datetime.fromisoformat(data["due_date"])if data["completed_at"]:task.completed_at = datetime.fromisoformat(data["completed_at"])return taskdef __str__(self):status = "✓" if self.completed else "◯"priority_str = "!" * self.priorityoverdue = " (过期)" if self.is_overdue() else ""due_info = ""if self.due_date:days = self.days_until_due()if days is not None:if days < 0:due_info = f" | {abs(days)}天前到期"else:due_info = f" | 还有{days}天到期"return f"{status} {priority_str} {self.title}{overdue}{due_info}"class Project:"""项目类(包含多个任务)"""def __init__(self, name, description=""):self.name = nameself.description = descriptionself.tasks = []self.created_at = datetime.now()def add_task(self, task):"""向项目添加任务"""task.project = self.nameself.tasks.append(task)def remove_task(self, task_id):"""从项目移除任务"""self.tasks = [task for task in self.tasks if task.id != task_id]def get_completed_tasks(self):"""获取已完成的任务"""return [task for task in self.tasks if task.completed]def get_incomplete_tasks(self):"""获取未完成的任务"""return [task for task in self.tasks if not task.completed]def completion_percentage(self):"""计算项目完成百分比"""if not self.tasks:return 0return len(self.get_completed_tasks()) / len(self.tasks) * 100def to_dict(self):"""将项目转换为字典"""return {"name": self.name,"description": self.description,"tasks": [task.id for task in self.tasks],"created_at": self.created_at.isoformat()}@classmethoddef from_dict(cls, data, all_tasks):"""从字典创建项目"""project = cls(name=data["name"],description=data.get("description", ""))project.created_at = datetime.fromisoformat(data["created_at"])# 通过任务ID找到对应的任务对象task_id_map = {task.id: task for task in all_tasks}for task_id in data["tasks"]:if task_id in task_id_map:project.tasks.append(task_id_map[task_id])return projectdef __str__(self):complete = len(self.get_completed_tasks())total = len(self.tasks)percent = self.completion_percentage()return f"{self.name} ({complete}/{total} 完成, {percent:.1f}%)"

2. storage.py - 数据存储

import json
import os
from datetime import datetime
from models import Task, Projectclass Storage:"""数据存储类"""def __init__(self, filename="tasks.json"):self.filename = filenameself.tasks = []self.projects = []def load_data(self):"""从文件加载数据"""if not os.path.exists(self.filename):return Falsetry:with open(self.filename, 'r', encoding='utf-8') as file:data = json.load(file)# 加载任务self.tasks = [Task.from_dict(task_data) for task_data in data.get("tasks", [])]# 加载项目self.projects = [Project.from_dict(project_data, self.tasks) for project_data in data.get("projects", [])]print(f"数据已从 {self.filename} 加载")return Trueexcept (FileNotFoundError, json.JSONDecodeError) as e:print(f"加载数据失败: {e}")return Falseexcept Exception as e:print(f"加载数据时发生未知错误: {e}")return Falsedef save_data(self):"""保存数据到文件"""data = {"tasks": [task.to_dict() for task in self.tasks],"projects": [project.to_dict() for project in self.projects],"last_saved": datetime.now().isoformat()}try:with open(self.filename, 'w', encoding='utf-8') as file:json.dump(data, file, ensure_ascii=False, indent=2)print(f"数据已保存到 {self.filename}")return Trueexcept Exception as e:print(f"保存数据失败: {e}")return Falsedef add_task(self, task):"""添加任务"""self.tasks.append(task)return self.save_data()def update_task(self, task_id, **kwargs):"""更新任务属性"""for task in self.tasks:if task.id == task_id:for key, value in kwargs.items():if hasattr(task, key):setattr(task, key, value)return self.save_data()return Falsedef delete_task(self, task_id):"""删除任务"""# 从任务列表中删除self.tasks = [task for task in self.tasks if task.id != task_id]# 从所有项目中删除该任务for project in self.projects:project.remove_task(task_id)return self.save_data()def add_project(self, project):"""添加项目"""self.projects.append(project)return self.save_data()def get_task_by_id(self, task_id):"""根据ID获取任务"""for task in self.tasks:if task.id == task_id:return taskreturn Nonedef get_project_by_name(self, project_name):"""根据名称获取项目"""for project in self.projects:if project.name == project_name:return projectreturn Nonedef get_tasks_by_project(self, project_name):"""获取属于指定项目的所有任务"""return [task for task in self.tasks if task.project == project_name]def get_tasks_by_tag(self, tag):"""获取具有指定标签的所有任务"""return [task for task in self.tasks if tag in task.tags]

3. utils.py - 工具函数

from datetime import datetime, timedelta
import redef parse_due_date(due_str):"""解析用户输入的截止日期字符串支持格式: - YYYY-MM-DD- 今天、明天、后天- 1天后、2周后、3个月后"""if not due_str:return Nonedue_str = due_str.lower().strip()# 处理相对日期if due_str == "今天":return datetime.now().replace(hour=23, minute=59, second=59)elif due_str == "明天":return (datetime.now() + timedelta(days=1)).replace(hour=23, minute=59, second=59)elif due_str == "后天":return (datetime.now() + timedelta(days=2)).replace(hour=23, minute=59, second=59)# 处理相对时间表达式 (如: 2天后, 1周后, 3个月后)match = re.match(r"(\d+)\s*(天|周|月|年)(后)?", due_str)if match:num = int(match.group(1))unit = match.group(2)if unit == "天":delta = timedelta(days=num)elif unit == "周":delta = timedelta(weeks=num)elif unit == "月":# 近似处理,一个月按30天计算delta = timedelta(days=30 * num)elif unit == "年":delta = timedelta(days=365 * num)return (datetime.now() + delta).replace(hour=23, minute=59, second=59)# 处理绝对日期 (YYYY-MM-DD)try:return datetime.strptime(due_str, "%Y-%m-%d").replace(hour=23, minute=59, second=59)except ValueError:pass# 如果无法解析,返回Nonereturn Nonedef format_date(date):"""格式化日期显示"""if not date:return "无"now = datetime.now()today = now.date()tomorrow = (now + timedelta(days=1)).date()yesterday = (now - timedelta(days=1)).date()if date.date() == today:return "今天"elif date.date() == tomorrow:return "明天"elif date.date() == yesterday:return "昨天"else:return date.strftime("%Y-%m-%d")def display_tasks(tasks, title="任务列表"):"""显示任务列表"""if not tasks:print("没有任务")returnprint(f"\n=== {title} ===")for i, task in enumerate(tasks, 1):print(f"{i}. {task}")# 显示统计信息complete = sum(1 for t in tasks if t.completed)overdue = sum(1 for t in tasks if t.is_overdue())print(f"\n总计: {len(tasks)} 任务 | 完成: {complete} | 未完成: {len(tasks)-complete} | 过期: {overdue}")def display_projects(projects):"""显示项目列表"""if not projects:print("没有项目")returnprint("\n=== 项目列表 ===")for i, project in enumerate(projects, 1):print(f"{i}. {project}")def get_user_choice(options, prompt="请选择"):"""获取用户选择"""for i, option in enumerate(options, 1):print(f"{i}. {option}")while True:try:choice = input(f"\n{prompt} (1-{len(options)}): ")if not choice:return Nonechoice_idx = int(choice) - 1if 0 <= choice_idx < len(options):return choice_idxelse:print(f"请输入 1-{len(options)} 之间的数字")except ValueError:print("请输入有效的数字")

4. main.py - 主程序

from storage import Storage
from models import Task, Project
from utils import parse_due_date, format_date, display_tasks, display_projects, get_user_choice
from datetime import datetime
import sysclass TaskManager:"""任务管理器主类"""def __init__(self):self.storage = Storage()self.storage.load_data()def run(self):"""运行主程序"""print("欢迎使用智能任务管理系统!")print("输入 'help' 查看可用命令")while True:try:command = input("\n> ").strip().lower()if command in ["quit", "exit", "q"]:if self.storage.save_data():print("数据已保存,再见!")breakelif command in ["help", "h", "?"]:self.show_help()elif command in ["list", "l", "ls"]:self.list_tasks()elif command in ["add", "a", "new"]:self.add_task()elif command in ["complete", "done", "c"]:self.complete_task()elif command in ["delete", "del", "rm"]:self.delete_task()elif command in ["projects", "p"]:self.list_projects()elif command in ["add-project", "ap"]:self.add_project()elif command in ["view-project", "vp"]:self.view_project()elif command in ["search", "s"]:self.search_tasks()elif command in ["today", "t"]:self.show_today_tasks()elif command in ["overdue", "o"]:self.show_overdue_tasks()else:print("未知命令,输入 'help' 查看可用命令")except KeyboardInterrupt:print("\n程序被中断")if self.storage.save_data():print("数据已保存")breakexcept Exception as e:print(f"发生错误: {e}")def show_help(self):"""显示帮助信息"""help_text = """
可用命令:list (l)      - 显示所有任务add (a)       - 添加新任务complete (c)  - 标记任务为完成delete (del)  - 删除任务projects (p)  - 显示所有项目add-project (ap) - 添加新项目view-project (vp) - 查看项目详情search (s)    - 搜索任务today (t)     - 显示今天的任务overdue (o)   - 显示过期任务help (h)      - 显示此帮助quit (q)      - 退出程序
"""print(help_text)def list_tasks(self):"""显示所有任务"""display_tasks(self.storage.tasks, "所有任务")def add_task(self):"""添加新任务"""print("\n=== 添加新任务 ===")title = input("任务标题: ").strip()if not title:print("任务标题不能为空")returndescription = input("任务描述 (可选): ").strip()# 获取截止日期due_input = input("截止日期 (YYYY-MM-DD, 今天, 明天, 2天后等): ").strip()due_date = parse_due_date(due_input)if due_date and due_date < datetime.now():print("警告: 截止日期已经过去!")# 获取优先级priority = 1try:priority_input = input("优先级 (1-5, 默认为1): ").strip()if priority_input:priority = int(priority_input)if not 1 <= priority <= 5:print("优先级必须在1-5之间,使用默认值1")priority = 1except ValueError:print("输入无效,使用默认优先级1")# 获取项目project = Noneif self.storage.projects:project_choice = input("分配到项目? (y/n): ").strip().lower()if project_choice in ["y", "yes"]:print("可用项目:")display_projects(self.storage.projects)choice = get_user_choice([p.name for p in self.storage.projects], "选择项目")if choice is not None:project = self.storage.projects[choice].name# 获取标签tags_input = input("标签 (多个标签用逗号分隔): ").strip()tags = [tag.strip() for tag in tags_input.split(",")] if tags_input else []# 创建任务task = Task(title=title,description=description,due_date=due_date,priority=priority,project=project,tags=tags)# 添加到项目(如果指定了项目)if project:project_obj = self.storage.get_project_by_name(project)if project_obj:project_obj.add_task(task)# 保存任务if self.storage.add_task(task):print(f"任务已添加: {task.title}")def complete_task(self):"""标记任务为完成"""incomplete_tasks = [t for t in self.storage.tasks if not t.completed]if not incomplete_tasks:print("没有未完成的任务")returndisplay_tasks(incomplete_tasks, "未完成任务")choice = get_user_choice([t.title for t in incomplete_tasks], "选择要标记为完成的任务")if choice is not None:task = incomplete_tasks[choice]task.mark_complete()if self.storage.save_data():print(f"任务已完成: {task.title}")def delete_task(self):"""删除任务"""if not self.storage.tasks:print("没有任务可删除")returndisplay_tasks(self.storage.tasks)choice = get_user_choice([t.title for t in self.storage.tasks], "选择要删除的任务")if choice is not None:task = self.storage.tasks[choice]if self.storage.delete_task(task.id):print(f"任务已删除: {task.title}")def list_projects(self):"""显示所有项目"""display_projects(self.storage.projects)def add_project(self):"""添加新项目"""print("\n=== 添加新项目 ===")name = input("项目名称: ").strip()if not name:print("项目名称不能为空")return# 检查项目是否已存在if self.storage.get_project_by_name(name):print(f"项目 '{name}' 已存在")returndescription = input("项目描述 (可选): ").strip()project = Project(name=name, description=description)if self.storage.add_project(project):print(f"项目已创建: {name}")def view_project(self):"""查看项目详情"""if not self.storage.projects:print("没有项目")returndisplay_projects(self.storage.projects)choice = get_user_choice([p.name for p in self.storage.projects], "选择要查看的项目")if choice is not None:project = self.storage.projects[choice]print(f"\n=== 项目: {project.name} ===")print(f"描述: {project.description}")print(f"创建时间: {format_date(project.created_at)}")print(f"完成进度: {project.completion_percentage():.1f}%")if project.tasks:display_tasks(project.tasks, "项目任务")else:print("该项目还没有任务")def search_tasks(self):"""搜索任务"""print("\n=== 搜索任务 ===")keyword = input("搜索关键词: ").strip()if not keyword:print("请输入搜索关键词")return# 搜索标题和描述中包含关键词的任务results = []for task in self.storage.tasks:if (keyword.lower() in task.title.lower() or keyword.lower() in task.description.lower()):results.append(task)display_tasks(results, f"搜索结果: '{keyword}'")def show_today_tasks(self):"""显示今天的任务"""today = datetime.now().date()today_tasks = []for task in self.storage.tasks:if task.due_date and task.due_date.date() == today:today_tasks.append(task)display_tasks(today_tasks, "今天的任务")def show_overdue_tasks(self):"""显示过期任务"""overdue_tasks = [task for task in self.storage.tasks if task.is_overdue()]display_tasks(overdue_tasks, "过期任务")if __name__ == "__main__":manager = TaskManager()manager.run()

四、运行效果

运行效果1
运行效果2
json数据

五、项目功能说明

这个任务管理系统具有以下功能:

  1. 任务管理

    • 创建、查看、完成和删除任务
    • 设置任务优先级、截止日期和标签
    • 将任务组织到项目中
  2. 项目管理

    • 创建和管理项目
    • 查看项目进度统计
  3. 数据持久化

    • 使用JSON文件存储所有数据
    • 自动加载和保存数据
  4. 搜索和过滤

    • 按关键词搜索任务
    • 查看今天到期的任务
    • 查看已过期的任务
  5. 用户友好的界面

    • 简单的命令行界面
    • 智能的日期解析(支持"今天"、“明天”、"2天后"等)
    • 清晰的任务显示格式

如何运行

  1. 将上述代码保存到相应的文件中
  2. 运行主程序:
    python main.py
    
  3. 按照提示使用各种命令管理任务

学习要点

通过这个项目,你可以学习和巩固以下Python知识点:

  1. 面向对象编程

    • 类的定义和使用(Task、Project、Storage类)
    • 继承(虽然没有显式使用,但可以扩展)
    • 封装(私有方法、属性访问控制)
    • 类方法和静态方法
  2. 异常处理

    • 使用try-except处理可能出现的错误
    • 自定义异常(可以扩展)
  3. 文件操作

    • JSON文件的读写
    • 数据序列化和反序列化
    • 文件路径处理
  4. 日期时间处理

    • datetime模块的使用
    • 日期格式化和解析
    • 日期计算和比较
  5. 字符串处理

    • 正则表达式用于解析日期
    • 字符串格式化和操作
  6. 数据结构

    • 列表、字典的复杂操作
    • 列表推导式
    • 数据过滤和搜索

六、扩展建议

完成基础版本后,你可以尝试以下扩展:

  1. 添加用户认证系统
  2. 实现数据加密存储
  3. 添加Web界面(使用Flask或Django)
  4. 实现任务提醒功能(邮件或桌面通知)
  5. 添加数据统计和可视化
  6. 支持任务导入/导出(CSV、iCalendar格式)

这个项目不仅帮助你巩固Python基础知识,还展示了如何将这些知识组合起来创建一个实用的应用程序。通过实际编码和扩展功能,你会对Python编程有更深入的理解。

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

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

相关文章

鸿蒙UI开发实战:解决布局错乱与响应异常

文章目录鸿蒙UI开发实战指南&#xff1a;解决ArkUI声明式布局错乱、组件不显示与事件响应异常引言ArkUI声明式开发的技术优势开发痛点与本文价值布局错乱问题常见原因固定像素单位使用不当布局嵌套层级过深Flex布局属性配置错误响应式布局缺失解决方案弹性单位适配&#xff1a;…

B.50.10.09-RPC核心原理与电商应用

RPC核心原理与电商应用实战 第1章&#xff1a;RPC核心概念与价值 1.1. 什么是 RPC&#xff1f; RPC (Remote Procedure Call)&#xff0c;即远程过程调用&#xff0c;是一种允许一台计算机&#xff08;客户端&#xff09;上的程序&#xff0c;调用另一台计算机&#xff08;服务…

【完整源码+数据集+部署教程】室内场景分割系统源码和数据集:改进yolo11-DWR

背景意义 研究背景与意义 随着智能家居和自动化技术的快速发展&#xff0c;室内场景理解在计算机视觉领域中变得愈发重要。室内场景分割不仅是计算机视觉的基础任务之一&#xff0c;也是实现智能家居、机器人导航、增强现实等应用的关键技术。传统的图像分割方法在处理复杂的室…

python入门常用知识

一、创建和快捷键 创建项目&#xff1a; New project创建模版&#xff1a;项目&代码的一种默认标记信息创建包(放代码的地方-方便整理分类更清晰) --- python package创建文本文件(配置文件)&#xff1a;File创建文件夹(测试数据、测试报告、测试截图)&#xff1a;Director…

原创未发表!POD-PINN本征正交分解结合物理信息神经网络多变量回归预测模型,Matlab实现

该代码实现了一个基于POD降维与物理信息神经网络&#xff08;PINN&#xff09;结合的回归预测模型&#xff0c;用于从高维数据中提取关键特征并进行物理约束下的数据驱动预测。一、主要功能 数据降维&#xff1a;使用POD&#xff08;Proper Orthogonal Decomposition&#xff0…

对接gemini-2.5-flash-image-preview教程

对接gemini-2.5-flash-image-preview教程 一、前置准备 1. 明确模型要求 本次对接的gemini-2.5-flash-image-preview模型&#xff0c;继承Gemini系列多模态特性&#xff0c;支持文本生成图片、文本结合图片编辑等功能。需注意该模型不支持仅输出图片&#xff0c;必须配置["…

如何制造一个AI Agent:从“人工智障”到“人工智能”的奇幻漂流

开篇&#xff1a;什么是AI Agent&#xff1f;它和我的“人工智障”音箱有啥区别&#xff1f;&#x1f3a4;朋友们&#xff0c;先想象一下&#xff1a;你的智能音箱 &#x1f5e3;️ -> &#x1f916; -> ❓&#xff1a;“Hey Siri&#xff0c;帮我订一份披萨&#xff0c;…

别错过!一杯奶茶钱开启企业微信 Power BI 之旅

随着微软的Power BI在数据分析和商业智能领域的广泛应用&#xff0c;人们对于Power BI使用的便捷性和高效性提出了更高的要求。 为了满足这些需求&#xff0c;PBI Plus应运而生&#xff0c;它巧妙地将即时通讯软件的强大功能与Power BI的分析能力相结合。接下来&#xff0c;我们…

MotionSound-简单易用的文本转语音工具

本文转载自&#xff1a;MotionSound-简单易用的文本转语音工具 - Hello123工具导航 ** 一、&#x1f3af; MotionSound&#xff1a;一键让文字 “开口说话” 的 AI 配音神器 做视频没时间配音&#xff1f;PPT 演示想加逼真语音&#xff1f;试试MotionSound吧&#xff01;它是…

Zynq设备与电脑相连方式

一、Zynq设备通过串口与电脑直接相连 “Zynq设备通过串口与电脑直接相连”是开发和调试Zynq系列SOC(如Zynq-7000或Zynq UltraScale+ MPSoC)时最基础、最重要的步骤。这个串口连接主要用于: 系统启动信息输出:查看Uboot、Linux内核的启动过程。 系统调试:输出调试信息(p…

python 逻辑运算练习题

图书馆入馆条件检查题目描述 编写程序判断一个人是否能进入图书馆。图书馆有以下入馆规则&#xff1a;年龄大于等于 18 岁&#xff0c;或者有家长陪同&#xff08;无论年龄&#xff09;输入示例图书馆入馆检查 请输入你的年龄&#xff1a;18 是否有家长陪同&#xff1f;(是/否)…

《Java Stream 流从入门到精通:一行代码搞定集合操作,效率提升 10 倍》

封面图上流动的「Stream」字样&#xff0c;正是 Java 8 以来最革命性的特性之一&#xff01;你是否还在写冗长的 for 循环遍历集合&#xff1f;是否为过滤、排序、聚合数据写一堆重复代码&#xff1f;Stream 流的出现&#xff0c;以声明式编程风格将复杂的集合操作浓缩为一行代…

前端笔记2025

前端 与后端交互 下载后端接口的文件时&#xff0c;若是二进制&#xff0c;需要在请求中添加responseType: ‘blob’ 例如 axios.get(‘http://127.0.0.1:8612/api/daily/report/tdjzxz?selectedMonth2022-06’, { headers: { ‘Accesstoken’: ‘f033b94655f84386a0c112b41…

【LeetCode每日一题】226. 翻转二叉树 101. 对称二叉树

每日一题226. 翻转二叉树题目总体思路代码101. 对称二叉树题目总体思路代码知识点2025.9.5226. 翻转二叉树 题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&am…

【RNN-LSTM-GRU】第三篇 LSTM门控机制详解:告别梯度消失,让神经网络拥有长期记忆

深入剖析LSTM的三大门控机制&#xff1a;遗忘门、输入门、输出门&#xff0c;通过直观比喻、数学原理和代码实现&#xff0c;彻底理解如何解决长期依赖问题。1. 引言&#xff1a;为什么需要LSTM&#xff1f;在上一篇讲解RNN的文章中&#xff0c;我们了解到​​循环神经网络&…

残差去噪扩散模型

论文题目:Residual Denoising Diffusion Models(残差去噪扩散模型) 会议:CVPR2024 摘要:残差去噪扩散模型(RDDM)是一种新的双重扩散过程,它将传统的单一去噪扩散过程解耦为残差扩散和噪声扩散。这种双重扩散框架通过引入残差,将基于去噪的扩散模型扩展为一种统一的、可…

MySQL与ES索引区别

MySQL与ES索引区别 MySQL索引像字典目录&#xff0c;ES索引更像整个图书馆的书籍分类系统。 关键限制&#xff1a;MySQL单表索引大小影响写性能&#xff0c;ES的分片数创建后不能改。 比如MySQL的“行”对应ES的“文档”&#xff0c;MySQL的“表”类似ES的“索引”概念。 MySQL…

vue3图标终极方案【npm包推荐】vue3-icon-sui(含源码详解)

简介 为彻底实现 vue3 项目图标自由&#xff0c;特开发此 npm包 vue3-icon-sui&#xff0c;全品类图标&#xff0c;通通支持&#xff01; iconify 图标svg 图标font-class 图标 安装 npm i vue3-icon-sui -S使用 按需导入 任意页面中 import myIcon from "vue3-icon-su…

redis----持久化

Redis 提供了两种主要的持久化机制&#xff0c;用于将内存中的数据保存到磁盘&#xff0c;以防止服务器重启或故障导致数据丢失。这两种机制分别是 RDB&#xff08;Redis Database&#xff09;和 AOF&#xff08;Append Only File&#xff09;。1. RDB 持久化RDB 是 Redis 默认…

Docker快速部署Mongodb主副本集实践

系列文章目录 第一章 Mongodb的主副本集 文章目录系列文章目录前言一、Mongodb基础介绍数据库&#xff08;Database&#xff09;集合&#xff08;Collection&#xff09;文档&#xff08;Document&#xff09;BSON&#xff08;Binary JSON&#xff09;_id&#xff08;主键&…