当前位置: 首页 > news >正文

第14篇:从入门到精通:掌握python上下文管理器

第14篇:上下文管理器

内容简介

本篇文章将深入探讨Python中的上下文管理器(Context Manager)。您将了解上下文管理器的概念与用途,学习如何实现自定义的上下文管理器,以及如何使用contextlib模块来简化上下文管理器的创建与使用。通过丰富的代码示例,您将能够灵活地使用上下文管理器来管理资源,提升代码的安全性和可维护性。


目录

  1. 上下文管理器概述
    • 什么是上下文管理器
    • 上下文管理器的用途
  2. 使用with语句
    • with语句的基本用法
    • with语句的优势
  3. 实现自定义上下文管理器
    • 通过类实现上下文管理器
    • 通过生成器实现上下文管理器
  4. contextlib模块
    • contextlib.contextmanager装饰器
    • 使用contextlib中的其他工具
  5. 示例代码
    • 基本的上下文管理器示例
    • 自定义上下文管理器示例
    • contextlib模块示例
  6. 常见问题及解决方法
    • 问题1:为什么使用上下文管理器管理资源?
    • 问题2:如何在自定义上下文管理器中处理异常?
    • 问题3:contextlib模块能简化上下文管理器的实现吗?
    • 问题4:如何嵌套使用多个上下文管理器?
  7. 总结

上下文管理器概述

什么是上下文管理器

**上下文管理器(Context Manager)**是Python中用于管理资源(如文件、网络连接、锁等)的一个对象,它定义了在进入和退出上下文时需要执行的操作。上下文管理器通过实现__enter__()__exit__()方法,确保在使用完资源后能够正确地进行清理操作,避免资源泄漏。

上下文管理器的用途

上下文管理器主要用于:

  • 资源管理:如打开和关闭文件、数据库连接等。
  • 事务管理:如数据库事务的开始和提交/回滚。
  • 锁管理:在多线程或多进程编程中管理锁的获取与释放。
  • 临时状态改变:如修改全局变量的临时值,并在退出时恢复。

使用with语句

with语句的基本用法

with语句是Python中用于使用上下文管理器的语法糖,它使得资源管理变得更加简洁和安全。基本语法如下:

with expression as variable:# 使用变量的代码块

with语句中,expression必须返回一个上下文管理器对象。进入with块时,会调用上下文管理器的__enter__()方法,并将返回值赋给variable。当with块结束时,无论是正常结束还是因异常退出,都会调用__exit__()方法。

with语句的优势

  • 简洁:减少了需要手动调用的资源释放代码。
  • 安全:确保资源在使用后被正确释放,即使在出现异常时也能保证。
  • 可读性:代码逻辑更清晰,资源管理部分更加集中。

示例

with open('example.txt', 'w') as f:f.write('Hello, World!')
# 文件在with块结束后自动关闭

实现自定义上下文管理器

通过类实现上下文管理器

要创建一个自定义的上下文管理器,可以定义一个类,并实现__enter__()__exit__()方法。

示例

class MyContextManager:def __enter__(self):print("进入上下文")return selfdef __exit__(self, exc_type, exc_val, exc_tb):print("退出上下文")if exc_type:print(f"异常类型: {exc_type}")print(f"异常值: {exc_val}")return False  # 不处理异常# 使用自定义上下文管理器
with MyContextManager() as cm:print("在上下文中执行代码")# 可以在此处抛出异常进行测试

输出

进入上下文
在上下文中执行代码
退出上下文

通过生成器实现上下文管理器

除了通过类实现,上下文管理器还可以通过生成器函数配合contextlib.contextmanager装饰器来实现。

示例

from contextlib import contextmanager@contextmanager
def my_generator_context():print("进入生成器上下文")try:yieldfinally:print("退出生成器上下文")# 使用生成器上下文管理器
with my_generator_context():print("在生成器上下文中执行代码")

输出

进入生成器上下文
在生成器上下文中执行代码
退出生成器上下文

contextlib模块

contextlib.contextmanager装饰器

contextlib模块提供了多种工具来简化上下文管理器的创建。其中,contextmanager装饰器可以将一个生成器函数转换为一个上下文管理器对象。

示例

from contextlib import contextmanager@contextmanager
def managed_resource():print("准备资源")try:yieldfinally:print("释放资源")# 使用上下文管理器
with managed_resource():print("使用资源")

输出

准备资源
使用资源
释放资源

使用contextlib中的其他工具

除了contextmanagercontextlib模块还提供了其他有用的工具,如:

  • closing:将一个对象包装为上下文管理器,确保在退出时调用其close()方法。

    from contextlib import closing
    import urllib.requestwith closing(urllib.request.urlopen('http://www.example.com')) as page:for line in page:print(line)
    
  • suppress:用于在with块中抑制指定的异常类型。

    from contextlib import suppresswith suppress(FileNotFoundError):os.remove('nonexistent_file.txt')
    
  • redirect_stdoutredirect_stderr:用于重定向标准输出和标准错误。

    import sys
    from contextlib import redirect_stdoutwith open('output.txt', 'w') as f, redirect_stdout(f):print("这将被写入文件")
    

示例代码

基本的上下文管理器示例

以下示例展示了如何使用with语句自动管理文件资源。

with open('example.txt', 'w') as f:f.write('Hello, Context Manager!')
# 文件在with块结束后自动关闭

自定义上下文管理器示例

以下示例展示了如何通过类创建一个自定义的上下文管理器,管理打印的开始与结束信息。

class PrintContext:def __enter__(self):print("开始执行代码块")return selfdef __exit__(self, exc_type, exc_val, exc_tb):print("结束执行代码块")if exc_type:print(f"异常类型: {exc_type}")print(f"异常值: {exc_val}")return False# 使用自定义上下文管理器
with PrintContext():print("在上下文中执行代码")# 可以在此处抛出异常进行测试

输出

开始执行代码块
在上下文中执行代码
结束执行代码块

contextlib模块示例

以下示例展示了如何使用contextlib.contextmanager装饰器创建一个简单的上下文管理器,用于计时代码块的执行时间。

from contextlib import contextmanager
import time@contextmanager
def timer():start = time.time()try:yieldfinally:end = time.time()print(f"代码块执行时间: {end - start} 秒")# 使用计时上下文管理器
with timer():total = 0for i in range(1000000):total += iprint(f"总和: {total}")

输出

总和: 499999500000
代码块执行时间: 0.05 秒

常见问题及解决方法

问题1:为什么使用上下文管理器管理资源?

原因:手动管理资源(如文件、网络连接)容易导致资源泄漏,特别是在程序出现异常时。上下文管理器通过自动化资源的获取和释放,确保资源在使用后被正确管理,提高代码的安全性和可靠性。

解决方法

使用with语句结合上下文管理器来管理资源,避免手动关闭或释放资源的错误。

示例

with open('example.txt', 'r') as f:data = f.read()
# 文件在with块结束后自动关闭

问题2:如何在自定义上下文管理器中处理异常?

原因:在上下文管理器的__exit__()方法中,可以捕获和处理在with块中发生的异常。如果希望处理特定异常或进行清理操作,需要在__exit__()方法中实现。

解决方法

__exit__()方法中,检查异常类型并进行相应处理。如果返回True,则抑制异常;否则,异常会被重新抛出。

示例

class HandleExceptionContext:def __enter__(self):print("进入上下文")return selfdef __exit__(self, exc_type, exc_val, exc_tb):if exc_type == ZeroDivisionError:print("捕获到除零异常")return True  # 抑制异常return False  # 不抑制其他异常# 使用上下文管理器
with HandleExceptionContext():print(1 / 0)  # ZeroDivisionError 被抑制print("程序继续执行")

输出

进入上下文
捕获到除零异常
程序继续执行

问题3:contextlib模块能简化上下文管理器的实现吗?

原因:手动实现上下文管理器需要编写类并实现__enter__()__exit__()方法,代码较为繁琐。contextlib模块提供了更简洁的方法来创建上下文管理器。

解决方法

使用contextlib.contextmanager装饰器,可以通过编写生成器函数来定义上下文管理器,减少代码量。

示例

from contextlib import contextmanager@contextmanager
def my_context():print("进入上下文")try:yieldfinally:print("退出上下文")# 使用上下文管理器
with my_context():print("在上下文中执行代码")

输出

进入上下文
在上下文中执行代码
退出上下文

问题4:如何嵌套使用多个上下文管理器?

原因:在实际应用中,可能需要同时管理多个资源。嵌套使用多个with语句会导致代码层级增加,降低可读性。

解决方法

Python允许在同一个with语句中管理多个上下文管理器,使用逗号分隔即可。

示例

with open('file1.txt', 'w') as f1, open('file2.txt', 'w') as f2:f1.write('内容1')f2.write('内容2')

输出

两个文件file1.txtfile2.txt分别被写入内容,且文件在with块结束后自动关闭。


总结

在本篇文章中,我们深入探讨了Python中的上下文管理器。通过理解上下文管理器的概念与用途,学习了如何通过类和生成器实现自定义上下文管理器,以及如何使用contextlib模块简化上下文管理器的创建与使用。通过丰富的代码示例,您已经掌握了使用上下文管理器来安全、高效地管理资源的核心技巧。

学习建议

  1. 实践项目:尝试在实际项目中应用上下文管理器,如文件处理、数据库连接管理、网络请求等场景。
  2. 深入学习contextlib模块:探索contextlib模块中的更多工具,如closingsuppress等,提升上下文管理器的使用技巧。
  3. 优化资源管理:在需要管理复杂资源的应用中,学习如何设计高效的上下文管理器,确保资源的正确获取与释放。
  4. 编写文档与测试:为自定义上下文管理器编写清晰的文档和单元测试,确保其功能的正确性和可靠性。
  5. 参与社区与开源项目:通过参与开源项目,学习他人如何运用上下文管理器,提升编程技能。
  6. 阅读相关书籍和文档:如《Python编程:从入门到实践》、《Fluent Python》,系统性地提升Python编程能力。

如果您有任何问题或需要进一步的帮助,请随时在评论区留言或联系相关技术社区。

相关文章:

第14篇:从入门到精通:掌握python上下文管理器

第14篇:上下文管理器 内容简介 本篇文章将深入探讨Python中的上下文管理器(Context Manager)。您将了解上下文管理器的概念与用途,学习如何实现自定义的上下文管理器,以及如何使用contextlib模块来简化上下文管理器的…...

cuda从零开始手搓PB神经网络

cuda实现PB神经网络 基于上一篇的矩阵点乘,实现了矩阵的加减乘除、函数调用等。并且复用之前元编程里面写的梯度下降、Adam、NAdam优化方法。实现PB神经网络如下: #ifndef __BP_NETWORK_HPP__ #define __BP_NETWORK_HPP__ #include "matrix.hpp&quo…...

Java 大视界 -- Java 大数据物联网应用:数据处理与设备管理(八)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

大模型之三十三- 开源Melo 语音合成

大模型之三十三- 开源Melo 语音合成 文本到语音(TTS)系统从基于基础音素的模型演变成复杂的端到端神经方法,这种方法可以直接将文本转换为语音。这一变革得益于深度学习的进步和计算能力的提升,已经在语音的自然度、韵律控制和跨语言能力方面取得了重大进展 。现代TTS系统…...

全同态加密理论、生态现状与未来展望(上)

《全同态加密理论、生态现状与未来展望》系列由lynndell2010gmail.com和mutourend2010gmail.com整理原创发布,分为上中下三个系列: 全同态加密理论、生态现状与未来展望(上):专注于介绍全同态加密理论知识。全同态加密…...

cursor重构谷粒商城02——30分钟构建图书管理系统【cursor使用教程番外篇】

前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。 本项目将基于谷粒商城…...

提升大语言模型的三大策略

1.概述 随着大语言模型(LLMs)在技术和应用上的不断发展,它们已经深刻地改变了我们与计算机的互动方式。从文本生成到语言理解,LLMs的应用几乎涵盖了各个行业。然而,尽管这些模型已展现出令人印象深刻的能力&#xff0c…...

Ubuntu 24.04 LTS 安装 Docker Desktop

Docker 简介 Docker 简介和安装Ubuntu上学习使用Docker的详细入门教程Docker 快速入门Ubuntu版(1h速通) Docker 安装 参考 How to Install Docker on Ubuntu 24.04: Step-by-Step Guide。 更新系统和安装依赖 在终端中运行以下命令以确保系统更新并…...

mysql查看binlog日志

mysql 配置、查看binlog日志: 示例为MySQL8.0 1、 检查binlog开启状态 SHOW VARIABLES LIKE ‘log_bin’; 如果未开启,修改配置my.ini 开启日志 安装目录配置my.ini(mysql8在data目录) log-binmysql-bin(开启日志并指定日志前缀&#xff…...

2. Flink分区策略

一. Flink分区策略概述 Flink任务在执行过程中,一个流(stream)包含一个或多个分区(Stream partition),TaskManager中的一个slot的SubTask就是一个stream partition(流分区)。 Flink分区之间进行数据传递模式有两种。 1. one-to-one模式 数据不需要重新…...

Qt 5.14.2 学习记录 —— 십칠 窗口和菜单

文章目录 1、Qt窗口2、菜单栏设置快捷键添加子菜单添加分割线和菜单图标 3、工具栏 QToolBar4、状态栏 QStatusBar5、浮动窗口 QDockWidget 1、Qt窗口 QWidget,即控件,是窗口的一部分。在界面中创建控件组成界面时,Qt自动生成了窗口&#xf…...

微信小程序中实现背景图片完全覆盖显示,可以通过设置CSS样式来实现

wxml页面代码 <view class"beijing"></view>wxss样式代码 /* pages/beiJing/beiJing.wxss */ .beijing {background-image: url("https://www.qipa250.com/qipa.jpg");/* 定位&#xff1a;绝对定位 */position: absolute;/* 上下左右都定位到…...

亲测有效!如何快速实现 PostgreSQL 数据迁移到 时序数据库TDengine

小T导读&#xff1a;本篇文章是“2024&#xff0c;我想和 TDengine 谈谈”征文活动的优秀投稿之一&#xff0c;作者从数据库运维的角度出发&#xff0c;分享了利用 TDengine Cloud 提供的迁移工具&#xff0c;从 PostgreSQL 数据库到 TDengine 进行数据迁移的完整实践过程。文章…...

中国综合算力指数(2024年)报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p39061 在全球算力因数字化技术发展而竞争加剧&#xff0c;我国积极推进算力发展并将综合算力作为数字经济核心驱动力的背景下&#xff0c;该报告对我国综合算力进行研究。 中国算力大会发布的《中国综合算力指数&#xff08;2024年…...

51c~ONNX~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch进行简单的自定义图像分类 ~ONNX 推理 图像分类是计算机视觉中的一项基本任务&#xff0c;涉及训练模型将图像分类为预定义类别。本文中&#xff0c;我们将探讨如何使用 PyTorch 构建一个简单的自定…...

线下陪玩系统架构与功能分析

2015工作至今&#xff0c;10年资深全栈工程师&#xff0c;CTO&#xff0c;擅长带团队、攻克各种技术难题、研发各类软件产品&#xff0c;我的代码态度&#xff1a;代码虐我千百遍&#xff0c;我待代码如初恋&#xff0c;我的工作态度&#xff1a;极致&#xff0c;责任&#xff…...

海康工业相机的应用部署不是简简单单!?

作者&#xff1a;SkyXZ CSDN&#xff1a;SkyXZ&#xff5e;-CSDN博客 博客园&#xff1a;SkyXZ - 博客园 笔者使用的设备及环境&#xff1a;WSL2-Ubuntu22.04MV-CS016-10UC 不会吧&#xff1f;不会吧&#xff1f;不会还有人拿到海康工业相机还是一脸懵叭&#xff1f;不会还有人…...

SAP POC 项目完工进度 - 收入确认方式【工程制造行业】【新准则下工程项目收入确认】

1. SAP POC收入确认基础概念 1.1 定义与原则 SAP POC&#xff08;Percentage of Completion&#xff09;收入确认方式是一种基于项目完工进度来确认收入的方法。其核心原则是根据项目实际完成的工作量或成本投入占预计总工作量或总成本的比例&#xff0c;来确定当期应确认的收…...

【Elasticsearch 】 聚合分析:聚合概述

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【算法】二分

二分 1.二分查找1.在排序数组中查找元素的第一个和最后一个位置2.牛可乐和魔法封印3.A-B 数对4.烦恼的高考志愿 2.二分答案1.木材加工2.砍树3.跳石头 1.二分查找 当我们的解具有二段性&#xff08;根据最终答案所在的位置判断是否具有二段性&#xff09;时&#xff0c;就可以使…...

如何将自己本地项目开源到github上?

环境&#xff1a; LLMB项目 问题描述&#xff1a; 如何将自己本地项目开源到github上&#xff1f; 解决方案&#xff1a; 步骤 1: 准备本地项目 确保项目整洁 确认所有的文件都在合适的位置&#xff0c;并且项目的 README.md 文件已经完善。检查是否有敏感信息&#xff0…...

编辑器Vim基本模式和指令 --【Linux基础开发工具】

文章目录 一、编辑器Vim 键盘布局二、Linux编辑器-vim使用三、vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode) 四、vim的基本操作五、vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作…...

Scade 表达式 - 使用索引的迭代器

Scade 表达式中的 map, fold, mapfold&#xff0c;会对输入数组参数中的元素逐个作处理&#xff0c;不需要数组元素的索引信息。若在处理数组元素时&#xff0c;需要数组元素相应的索引信息&#xff0c;则可使用迭代器算子 mapi, foldi, mapfoldi。 mapi 算子 mapi 算子的行为…...

K8s学习

Kubernetes 1. Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xf…...

面试--你的数据库中密码是如何存储的?

文章目录 三种分类使用 MD5 加密存储加盐存储Base64 编码:常见的对称加密算法常见的非对称加密算法https 传输加密 在开发中需要存储用户的密码&#xff0c;这个密码一定是加密存储的&#xff0c;如果是明文存储那么如果数据库被攻击了&#xff0c;密码就泄露了。 我们要对数据…...

微服务学习-快速搭建

1. 速通版 1.1. git clone 拉取项目代码&#xff0c;导入 idea 中 git clone icoolkj-microservices-code: 致力于搭建微服务架构平台 1.2. git checkout v1.0.1版本 链接地址&#xff1a;icoolkj-microservices-code 标签 - Gitee.com 2. 项目服务结构 3. 实现重点步骤 …...

兼职全职招聘系统架构与功能分析

2015工作至今&#xff0c;10年资深全栈工程师&#xff0c;CTO&#xff0c;擅长带团队、攻克各种技术难题、研发各类软件产品&#xff0c;我的代码态度&#xff1a;代码虐我千百遍&#xff0c;我待代码如初恋&#xff0c;我的工作态度&#xff1a;极致&#xff0c;责任&#xff…...

【云岚到家】-day03-门户缓存实现实战

【云岚到家】-day03-门户缓存实现实战 1.定时任务更新缓存 1.1 搭建XXL-JOB环境 1.1.1 分布式调度平台XXL-JOB介绍 对于开通区域列表的缓存数据需要由定时任务每天凌晨更新缓存&#xff0c;如何实现定时任务呢&#xff1f; 1.使用jdk提供的Timer定时器 示例代码如下&#xf…...

Ubuntu 24.04 LTS 开启 SMB 服务,并通过 windows 访问

Ubuntu 24.04 LTS 背景资料 Ubuntu服务器折腾集Ubuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locations Ubuntu开启samba和window共享文件 Ubuntu 配置 SMB 服务 安装 Samba 确保 Samba 已安装。如果未安装&#xff0c;运行以下命令进行安装&#xff…...

“AI人工智能内容辅助创作平台:让创意不再“卡壳”

在如今这个信息爆炸的时代&#xff0c;内容创作成了每个人的“必修课”。无论是自媒体大V、文案策划&#xff0c;还是普通学生写作文&#xff0c;大家都会遇到一个让人抓狂的问题——“创意枯竭”。有时候&#xff0c;脑袋里空空如也&#xff0c;一个字都写不出来&#xff0c;那…...

mac 安装 node

brew versions node // 安装 node brew versions node14 // 安装指定版本 卸载node: sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm su…...

VUE之Router使用及工作模式

1、路由的使用 【两个注意点】 1)路由组件通常放在pages 或 views文件夹,一般组件通常放在components文件夹。 2)通过点击导航,视觉效果上"消失"了的路由组件,默认是被"卸载"掉的,需要的时候再去挂载。 // 创建一个路由器,并暴露出去// 第一步:…...

day25_HTML

今日内容 零、 复习昨日 一、HTML 零、 复习昨日 一、Web开发 前端 HTML ,页面展现CSS , 样式JS (JavaScript) , 动起来 二、HTML 2.1 HTML概念 ​ 网页&#xff0c;是网站中的一个页面&#xff0c;通常是网页是构成网站的基本元素&#xff0c;是承载各种网站应用的平台。通俗…...

(开源)基于Django+Yolov8+Tensorflow的智能鸟类识别平台

1 项目简介&#xff08;开源地址在文章结尾&#xff09; 系统旨在为了帮助鸟类爱好者、学者、动物保护协会等群体更好的了解和保护鸟类动物。用户群体可以通过平台采集野外鸟类的保护动物照片和视频&#xff0c;甄别分类、实况分析鸟类保护动物&#xff0c;与全世界各地的用户&…...

【AI日记】25.01.20

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛&#xff1a;Forecasting Sticker Sales 读书 书名&#xff1a;自由宪章阅读原因&#xff1a;作者哈耶克&#xff0c;诺贝尔经济学奖得主&#xff0c;之前读过他的 《通往奴役…...

基于机器学习的用户健康风险分类及预测分析

完整源码项目包获取→点击文章末尾名片&#xff01; 背景描述 在这个日益注重健康与体能的时代&#xff0c;健身已成为许多人追求健康生活的重要组成部分。 本数据集包含若干健身房会员的详细信息&#xff0c;包括年龄、性别、体重、身高、心率、锻炼类型、身体脂肪比例等多项关…...

AI生成内容——JavaScript中的Promise、async和wait

一、Promise *1. 概念&#xff1a; Promise 是 JavaScript 中处理异步操作的一种对象&#xff0c;它表示一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。一个 Promise 对象处于以下三种状态之一&#xff1a; Pending&#xff08;进行中&#xff09;&#…...

Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)

Java基于SSM框架的社区团购系统小程序设计与实现 博主介绍&#xff1a;✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f4…...

Git原理与应用(三)【远程操作 | 理解分布式 | 推送拉取远程仓库 | 标签管理】

Git 理解分布式版本控制系统远程仓库新建远程仓库克隆远程仓库向远程仓库推送配置Git忽略特殊文件 标签管理理解标签创建标签操作标签删除标签 理解分布式版本控制系统 我们⽬前所说的所有内容&#xff08;工作区&#xff0c;暂存区&#xff0c;版本库等等&#xff09;&#x…...

【esp32小程序】小程序篇02——连接git

一、创建仓库 进入gitee官网&#xff0c;登录&#xff08;如果没有gitee账号的就自行注册一下&#xff09;。 点击号-->新建仓库 填写好必填信息&#xff0c;然后点击“创建” 二、微信开发者工具配置 在微信开发者工具打开我们的项目。按下面的步骤依次点击 三、验证 点…...

MongoDB基本操作

一、实验目的 1. 熟悉MongoDB的基本操作&#xff0c;包括CRUD&#xff08;增加、读取、更新、删除&#xff09;。 2. 理解MongoDB的文档型数据库特性和Shell的使用。 3. 培养学生通过命令行操作数据库的能力。 4. 强化数据库操作的实际应用能力。 二、实验环境准备 1.…...

Brooks MagnaTran LEAP User Manual 指导半导体机械手

Brooks MagnaTran LEAP User Manual 指导半导体机械手...

【Red Hat8】:搭建DHCP服务器

1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 &#xff08;搭建的时候用vim 自行定义文件名.repo或者是vi 自行定义文件名.repo&#xff09; 5、安装dhcp-server 6、复制模板文件 dhcpd.conf 是DHCP服务的配置文件&#xff0c;DHCP服务所有参数都是通过修改dhcpd.co…...

JupyterLab 安装以及部分相关配置

安装 JupyterLab pip install jupyter启动 JupyterLab jupyter lab [--port <指定的端口号>] [--no-browser] # --port 指定端口 # --no-browser 启动时不打开浏览器安装中文 首先安装中文包 pip install jupyterlab-language-pack-zh-CN安装完成后重启 JupyterLab 选…...

深圳桂湾公园的花海

工作日的午休时间我经常骑行到桂湾公园&#xff0c;时不时都能碰上一些阿姨问&#xff1a;小伙子你知道桂湾公园的花海在哪里吗&#xff1f;我找了半天了哈。我发现不少找花海的人是从桂湾地铁或前湾地铁下车&#xff0c;然后在偌大的桂湾公园找寻。其实只要定位前海紫荆园就好…...

寒假刷题Day10

一、220. 存在重复元素 III 两种解法&#xff1a;并没有弄懂&#xff0c;待复盘 class Solution { public:bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {set<long> st;for (int i 0; i < nums.size(); i) {auto lb st.lower_…...

【Java-图片存储方案】

Java功能相关文章 一、Minio存储大体量图片 上传到Minio指定路径&#xff0c;前端预览时,需要生成临时访问凭证的URL import io.minio.MinioClient; import io.minio.errors.MinioException; import io.minio.http.Method; import io.minio.GetPresignedObjectUrlArgs; impo…...

机器人传动力系统介绍

以下是对机器人驱动系统的分析、最新科技应用以及世界顶级公司机器人型号使用的技术&#xff1a; 机器人驱动系统分析 液压驱动&#xff1a;利用液体压力来传递动力&#xff0c;通过液压泵将液压油从油箱抽出&#xff0c;送至液压缸&#xff0c;推动活塞运动&#xff0c;进而…...

DDD - 微服务落地的技术实践

文章目录 Pre概述如何发挥微服务的优势怎样提供微服务接口原则微服务的拆分与防腐层的设计 去中心化的数据管理数据关联查询的难题Case 1Case 2Case 3 总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服…...

《Vue3 十》Vue 底层原理

命令式编程和声明式编程&#xff1a; 以计时器为例&#xff1a; // 原生 JavaScript 实现计数器&#xff0c;是命令式编程 <div><h1>当前数字&#xff1a;<span class"count"></span></h1><button class"add" click&qu…...