Python入门教程丨2.3 流程控制、算法效率分析及优化
流程控制是用于控制程序执行顺序的机制,它决定了程序中的语句按照何种顺序被执行。
本节课将详细讲解 Python 流程控制的三大核心结构:顺序、条件和循环,并配备一些小案例。
1. 顺序结构:从头到尾依次执行
顺序结构是程序中最基础的控制方式,代码会按照书写顺序从上到下逐行执行,没有任何跳转或判断。
例如我们用输出字符串的方式模拟一个日常活动,依次完成:
print("早上起床")
print("刷牙洗脸")
print("开始学习 Python 流程控制")
print("总结笔记并练习")
程序输出:
早上起床
刷牙洗脸
开始学习 Python 流程控制
总结笔记并练习
亦或是一个简易的计算器,给出两数进行加减乘除:
num1 = 10
num2 = 5add = num1 + num2
subtract = num1 - num2
multiply = num1 * num2
divide = num1 / num2print(f"加法结果:{add}")
print(f"减法结果:{subtract}")
print(f"乘法结果:{multiply}")
print(f"除法结果:{divide}")
2. 条件结构:让代码学会“拐弯”
条件结构通过判断条件是否成立,决定执行哪段代码,从流程图上看就是一个岔路口,不同的条件走不同的路线。
在 Python 中,条件控制结构主要有 if-else
和 match-case
两种形式,它们各自适用于不同场景。
2.1 if-else
我们首先来看较常用的if-else
。
语法格式:
if 条件:执行语句1
elif 条件:执行语句2
else:其他情况
例如我们通过输入分数,判断学生的成绩:
score = int(input("请输入分数:"))
if score >= 90:print("优秀!")
elif 70 <= score < 90:print("良好!")
elif 60 <= score < 70:print("及格!")
else:print("不及格,请努力!")
又或者是输入三条边,判断是否能构成三角形,并判定类型:
a = int(input("请输入第一条边:"))
b = int(input("请输入第二条边:"))
c = int(input("请输入第三条边:"))if a + b > c and a + c > b and b + c > a:if a == b == c:print("这是一个等边三角形!")elif a == b or b == c or a == c:print("这是一个等腰三角形!")else:print("这是一个普通三角形!")
else:print("无法构成三角形。")
2.2 match-case
match-case
是 类似于其他语言中的 switch-case
。它适用于明确的值匹配或简单的模式匹配场景。
语法格式:
match 表达式:
case 情况1:执行语句1
case 情况2:执行语句2
case _:默认执行语句
适用范围:
- 条件是固定值或简单的匹配模式,如具体的数值。
- 多个条件分支数量较多且独立。
例如我们按照星期安排活动:
day = input("请输入星期几(如星期天):")match day:
case "星期一":print("今天是周一,安排组会!")
case "星期二":print("今天是周二,团队讨论!")
case "星期五":print("今天是周五,准备周报!")
case _:print("今天没有特别安排。")
3. 循环结构
循环结构可以让代码反复执行某些操作。Python 提供了两种主要循环:for
循环和 while
循环。
3.1 for 循环
for
循环是迭代式循环,用于遍历序列(如列表、元组、字符串等)中的每个元素,或者循环特定次数。
语法:
for 变量 in 可迭代对象:执行语句
适用范围:
- 确定循环次数。
- 需要遍历序列中的每个元素。
例如计算列表元素的和
numbers = [1, 2, 3, 4, 5]
total = 0
for num in numbers:total += num
print(f"列表的总和是:{total}")
嵌套循环指在一个循环内再包含另一个循环,适用于需要多层次迭代的场景。
经典案例:打印九九乘法表
for i in range(1, 10): # 外层控制行for j in range(1, i + 1): # 内层控制列print(f"{j}×{i}={i * j}", end="\t") # 使用制表符对齐print() # 每行结束后换行
输出结果:
1 × 1 = 1
1 × 2 = 2 2 × 2 = 4
1 × 3 = 3 2 × 3 = 6 3 × 3 = 9
1 × 4 = 4 2 × 4 = 8 3 × 4 = 12 4 × 4 = 16
1 × 5 = 5 2 × 5 = 10 3 × 5 = 15 4 × 5 = 20 5 × 5 = 25
1 × 6 = 6 2 × 6 = 12 3 × 6 = 18 4 × 6 = 24 5 × 6 = 30 6 × 6 = 36
1 × 7 = 7 2 × 7 = 14 3 × 7 = 21 4 × 7 = 28 5 × 7 = 35 6 × 7 = 42 7 × 7 = 49
1 × 8 = 8 2 × 8 = 16 3 × 8 = 24 4 × 8 = 32 5 × 8 = 40 6 × 8 = 48 7 × 8 = 56 8 × 8 = 64
1 × 9 = 9 2 × 9 = 18 3 × 9 = 27 4 × 9 = 36 5 × 9 = 45 6 × 9 = 54 7 × 9 = 63 8 × 9 = 72 9 × 9 = 81
3.2 while 循环:灵活性更强的循环
while
循环是条件式循环,反复执行代码块,直到条件为 False
。
语法:
while 条件:执行语句
适用范围:
- 循环次数不确定,但有明确的终止条件。
- 循环依赖某种动态计算的条件。
例子:猜数字游戏,并不能确保第几次猜对,就需要用 while 条件判断。
import randomsecret_number = random.randint(1, 10)
attempts = 3while attempts > 0:guess = int(input("猜猜我是几(1-10):"))if guess == secret_number:print("恭喜你,猜对了!")breakelif guess < secret_number:print("小了!")else:print("大了!")attempts -= 1if attempts == 0:print(f"很遗憾,正确答案是:{secret_number}")
3.3 break 和 continue循环控制语句
break
:提前结束循环。continue
:跳过本次循环,继续下一次。
例如需要过滤奇数
for i in range(10):if i % 2 == 0:continueprint(f"奇数:{i}")
4.时间复杂度与算法效率
在引入循环的概念后,我们就需要开始注重算法效率,循环在程序中往往会被反复执行,是性能瓶颈的主要来源之一。
而顺序结构是一次性执行的,运行时间是固定的,与输入规模无关。例如:
x = 5
y = x + 1
print(y)
无论输入规模多大,这些操作只执行一次,它们的时间复杂度是 O(1),无需深入分析。
循环执行的次数直接影响程序的运行时间,如果循环次数随着输入规模显著增加,会导致程序运行缓慢,甚至无法处理较大的输入。因此,分析循环的算法效率至关重要。
4.1 什么是时间复杂度?
时间复杂度是描述算法执行时间与输入规模之间关系的指标,用大O符号表示。例如:
- O(1) 表示操作的执行时间不随问题规模变化。
- O(n) 表示执行时间与问题规模成正比。
- O(n^2) 表示执行时间与问题规模成平方次比。
一般来说,一次循环的时间复杂度为 O(n),嵌套循环的时间复杂度为 O(n^2),当然具体问题需要具体分析,也有可能是 O(nlog2n)。但总体来说,嵌套循环会大大增加时间复杂度,编写程序时注意用其他方式替换来优化。
时间复杂度让我们预测程序在不同输入规模下的性能,从而评估其效率。
4.2 不同时间复杂度算法对比
我们用具体的例子来说明算法对时间复杂度的影响。
假设有两个数组:找到两个数组中和为目标值的所有数对arr1 = [1, 2, 3, 4]
arr2 = [3, 4, 5, 6]
目标是找出所有满足 x + y = 7 的数对。
1) 不使用嵌套循环解决问题(排序 + 下标)
我们可以先数组排序,然后使用两个下标(指针)来解决问题。
arr1 = [1, 2, 3, 4]
arr2 = [3, 4, 5, 6]
target = 7# 排序两个数组
arr1.sort()
arr2.sort()result = []
i, j = 0, len(arr2) - 1 # 设置两个下标,一个从 arr1 开始,一个从 arr2 末尾while i < len(arr1) and j >= 0: if arr1[i] + arr2[j] == target:result.append((arr1[i], arr2[j]))i += 1j -= 1 # 找到匹配的后,同时移动两个下标elif arr1[i] + arr2[j] < target:i += 1 # 当前和小于目标值,增加较小的数字else:j -= 1 # 当前和大于目标值,减少较大的数字print("结果:", result)
输出:
结果: [(1, 6), (3, 4)]
2) 使用嵌套循环解决问题
arr1 = [1, 2, 3, 4]
arr2 = [3, 4, 5, 6]
target = 7result = []
for x in arr1: # 遍历第一个数组for y in arr2: # 遍历第二个数组if x + y == target: # 检查是否满足条件result.append((x, y))print("结果(嵌套循环):", result)
输出:
结果(嵌套循环): [(1, 6), (3, 4)]
4.3 算法效率分析:
在这个嵌套循环中,每个外层循环 n 次,内层循环 m次,时间复杂度为:O(nxm)=O(n^2)
若n = m = 1,000 ,循环次数=1,000×1,000=1,000,000,需要执行百万次操作。
当 n = m = 10^6 时,循环次数=10^6×10^6=10^12,需要执行万亿次操作。
而在不使用嵌套循环的算法中:
排序两个数组需要:O(nlogn+mlogm)
,遍历两个数组的时间复杂度为:O(n+m)
若 n = m = 1,000,排序时间约为 1,000log1,000≈10,000 次操作,遍历时间为 1,000+1,000=2,000次操作。
总循环次数=10,000+2,000=12,000,优化了 99% 以上的计算量。
若 n = m= 10^6,总循环次数=20,000,000+2,000,000=22,000,000,相比万亿级的计算量已经大大减少。
因此在编程时,我们要特别注意:
- 嵌套循环虽然简单直接,处理日常任务可以使用,但容易因指数增长导致效率低下。
- 在需要处理大规模数据时,应尽量避免嵌套循环,优化算法效率,减少不必要的重复计算。
5.小结
在本节中,我们一些重要的控制结构,重点是条件判断和循环。
⭐️ 循环结构用于重复执行代码,有 for 和 while 两种形式,适合不同场景。
⭐ 条件判断让程序具备决策能力,if-else 适合复杂逻辑,match-case 则简化多分支选择。
⭐ 算法效率与时间复杂度密切相关,循环的次数随数据规模增加而快速增长,优化代码能显著提高性能。
相关文章:
Python入门教程丨2.3 流程控制、算法效率分析及优化
流程控制是用于控制程序执行顺序的机制,它决定了程序中的语句按照何种顺序被执行。 本节课将详细讲解 Python 流程控制的三大核心结构:顺序、条件和循环,并配备一些小案例。 1. 顺序结构:从头到尾依次执行 顺序结构是程序中最基…...
NVIDIA发布个人超算利器project digital,标志着ai元年的开启
上图NVIDIA公司创始人兼首席执行官 黄仁勋(Jensen Huang) 这些年被大家熟知的赛博朋克风格一直都是未来的代言词,可以承载人类记忆的芯片,甚至能独立思考的仿生人,现在,随着NVIDIA的project digital发布之后…...
spring-mvc源码分析v3.3.0
分析下springboot内嵌tomcat启动流程,即springboot-mvc <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.3.0</version> </dependency>环境…...
反爬风控设计之请求头顺序检测
本次主要讲解请求头的顺序检测的反爬实现, 如下使用Django写的headers请求头顺序检验算法: def index(request):# 获取请求头的顺序request_order list(request.META.keys())print(request_order)# 定义标准请求头顺序standard_order ["HTTP_HO…...
力扣 查找元素的位置
二分查找经典例题。 题目 要是只是从数组中用二分查找对应的元素,套一下模板一下就可以得出了,然后这题就在于其中会有多个目标元素,要用不同的方式在找到第一个元素时再做偏移。 时间复杂度:O(log n),空间复杂度&am…...
Android-V lmkd 中的那些属性值
源码基于:Android V 相关博文: Android lmkd 机制详解(一) Android lmkd 机制详解(二) Android lmkd 机制从R到T 1. 汇总 属性名说明默认值 ro.lmk.debug 启动 lmkd 的debug 模式,会打印一…...
LabVIEW 程序中的 R6025 错误
R6025错误 通常是 运行时库 错误,特别是与 C 运行时库 相关。这种错误通常会在程序运行时出现,尤其是在使用 C 编译的程序或依赖 C 运行时库的程序时。 可能的原因: 内存访问冲突: R6025 错误通常是由于程序在运行时访问无效内…...
vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址
VMware版本 :VMware Workstation 17 Pro ubuntu版本:ubuntu-18.04.4-desktop-amd64 主机环境 win11 1. 修改 VMware虚拟网络编辑器 打开vmware,点击顶部的“编辑"菜单,打开 ”虚拟化网络编辑器“ 。 选择更改设置&#…...
mybatis延迟加载、缓存
目录 一、所需表 二、延迟加载 1.延迟加载概念 2.立即加载和延迟加载的应用场景 3.多对一延迟加载查询演示 (1)实体类 User Account (2)AccountMapper接口 (3)AccountMapper.xml (4)UserMapper接口 (5)UserMapper.xml (6)在总配置文件(mybatis-config.xml)中开启延…...
云上贵州多彩宝荣获仓颉社区先锋应用奖 | 助力数字政务新突破
在信息技术应用创新的浪潮中,仓颉社区吸引了众多企业和开发者的积极参与,已有多个应用成功落地,展现出蓬勃的创新活力。仓颉编程语言精心遴选了在社区建设、应用创新、开源共建、技术布道等方面做出突出贡献的优秀项目应用,并颁发…...
设计模式02:结构型设计模式之适配器模式使用情景及其基础Demo
1.适配器模式 用途:接口兼容评价:复杂、冗余、难以调试,个人认为直接在旧系统那里封装一个新实现调用旧实现就好了场景:系统A、B、C想调用同一个功能接口,但是实现细节存在差异时(其实就是入参和出参转化处…...
镭速大文件传输视频文件预览实现原理
镭速可以支持视频预览,在测试过程中需要大量不同格式的视频,如果直接去找各种格式的视频不太现实,所以就会用到一个视频格式转换的工具ffmpeg,本文将介绍ffmpeg的基本使用方法。FFmpeg 是一个免费开源的音视频处理工具,…...
Mac上安装Label Studio
在Mac上安装Anaconda并随后安装Label Studio,可以按照以下步骤进行: 1. 在Mac上安装Anaconda 首先,你需要从Anaconda的官方网站下载适用于Mac的安装程序。访问Anaconda官网,点击“Download Anaconda”按钮,选择适合M…...
git操作(Windows中GitHub)
使用git控制GitHub中的仓库版本,并在Windows桌面中创建与修改代码,与GitHub仓库进行同步。 创建自己的GitHub仓库 创建一个gen_code实验性仓库用来学习和验证git在Windows下的使用方法:https://github.com/Martianing/gen_code git初始设置…...
低代码平台:技术复杂性的系统简化
在传统开发模式下,应用构建需要经历需求分析、代码开发、测试部署等多环节,流程繁琐且耗时,往往成为企业技术创新的瓶颈。低代码平台通过模块化和自动化技术重新定义开发流程,使开发者能够在较短时间内实现复杂的应用功能…...
物联网网关Web服务器--lighttpd服务器部署与应用测试
以下是在国产ARM处理器E2000飞腾派开发板上部署 lighttpd 并进行 CGI 应用开发的步骤: 1、lighttpd简介 Lighttpd 是一款轻量级的开源 Web 服务器软件,具有以下特点和功能: 特点 轻量级:Lighttpd 在设计上注重轻量级和高效性&a…...
Flutter+vsCode 安装问题记录
VSCode在安装完AndroidSDK以及相关插件后,运行Flutter项目时选择模拟器提示:avdmanager is missing from the Android SDK,确保环境变量中存在ANDROID_HOME,且执行了flutter config --android-sdk 地址后,如果还提示&a…...
【CompletableFuture实战】
CompletableFuture实战 前言 前言 过去的一年,匆匆忙忙,换了一次工作,写博客的习惯就落下了,总之,有点懈怠。希望今年能重拾信心,步入正规! CompletableFuture的用法网上资料颇多,…...
【k8s面试题2025】3、练气中期
体内灵气的量和纯度在逐渐增加。 文章目录 在 Kubernetes 中自定义 Service端口报错常用控制器Kubernetes 中拉伸收缩副本失效设置节点容忍异常时间Deployment 控制器的升级和回滚日志收集资源监控监控 Docker将 Master 节点设置为可调度 在 Kubernetes 中自定义 Service端口报…...
【高可用自动化体系】自动化体系
架构设计的愿景就是高可用、高性能、高扩展、高效率。为了实现架构设计四高愿景,需要实现自动化系统目标: 标准化。 流程自助化。 可视化:可观测系统各项指标、包括全链路跟踪。 自动化:ci/cd 自动化部署。 精细化:…...
Spring boot框架下的RocketMQ消息中间件
1. RocketMQ 基础概念 1.1 核心概念 以下是 RocketMQ 核心概念在 Spring Boot 的 Java 后端代码中的实际使用方式: Producer(生产者) 定义:Producer 是负责发送消息到 RocketMQ 的组件。它可以将消息发送到指定的 Topic。 实…...
http转化为https生成自签名证书
背景 项目开发阶段前后交互采用http协议,演示环境采用htttps协议 ,此处为个人demo案例 组件 后端:springBoot 前端:vue web 服务:tomcat 部署环境:linux 生成自签名证书 创建目录 存储证书位置 # mkdir -p…...
关于2025年智能化招聘管理系统平台发展趋势
2025年,招聘管理领域正站在变革的十字路口,全新的技术浪潮与不断变化的职场生态相互碰撞,促使招聘管理系统成为重塑企业人才战略的关键力量。智能化招聘管理系统平台在这一背景下迅速崛起,其发展趋势不仅影响企业的招聘效率与质量…...
CentOS 9 Stream 上安装 Node.js 18.20.5
要在 CentOS 9 Stream 上安装 Node.js 18.20.5,可以按照以下步骤操作: 1. 安装依赖 首先,确保你已经更新了系统并安装了必要的依赖包。 sudo dnf update -y sudo dnf install -y gcc-c make2. 安装 Node.js 18.20.5 Node.js 官方提供了一…...
NSIS 创建一键安装程序
nsis 安装redis 、mysql 、jdk navicat、 notepad、 使用NSIS 创建一键安装程序 分为两步 下载 NSIS编写 一键安装代码 1.16脚本 ; 请求管理员权限运行安装程序 RequestExecutionLevel admin; 该脚本使用 HM VNISEdit 脚本编辑器向导产生; 安装程序初始定义常量 !define PRO…...
NanoKVM简单开箱测评和拆解,让普通电脑实现BMC/IPMI远程管理功能
Sipeed推出了NanoKVM,简直是没有BMC的台式机和工作站的福音。有了这个就可以轻松实现以往服务器才有的远程管理功能。 NanoKVM 简介 Lichee NanoKVM 是基于 LicheeRV Nano 的 IP-KVM 产品,继承了 LicheeRV Nano 的极致体积 和 强大功能。 NanoKVM 包含…...
【混合开发】CefSharp+Vue桌面应用程序开发
为什么选择CefSharpVue做桌面应用程序 CefSharp 基于 Chromium Embedded Framework (CEF) ,它可以将 Chromium 浏览器的功能嵌入到 .NET 应用程序中。通过 CefSharp,开发者可以在桌面应用程序中集成 Web 技术,包括 HTML、JavaScript、CSS 等…...
2024最新版JavaScript逆向爬虫教程-------基础篇之Chrome开发者工具学习
目录 一、打开Chrome DevTools的三种方式二、Elements元素面板三、Console控制台面板四、Sources面板五、Network面板六、Application面板七、逆向调试技巧 7.1 善用搜索7.2 查看请求调用堆栈7.3 XHR 请求断点7.4 Console 插桩7.5 堆内存函数调用7.6 复制Console面板输出 工…...
下定决心不去读研了。。。
大家好,我是苍何。 之前发表过一篇文章,表达了自己读研的困惑和纠结,得到了大家很多的建议,也引起了很多人的共鸣,在留言区分享了自己的故事,看着这些故事,我觉得都够苍何写一部小说了。 可惜苍…...
Java21 正则表达式
在 Java 21 中,正则表达式主要通过 java.util.regex 包提供支持,其核心组件包括 Pattern、Matcher 和 String 类中自带的方法(如 replaceAll 和 matches)。以下是关于正则表达式在 Java 21 中的详细介绍及一些新的特性或用法。 核…...
Docker安装PostGreSQL docker安装PostGreSQL 完整详细教程
Docker安装PostGreSQL docker安装PostGreSQL 完整详细教程 Docker常用命令大全Docker 运行命令生成Docker 上安装 PostGreSQL 14.15 的步骤:1、拉取 PostGreSQL 14.15 镜像2、创建并运行容器3、测试连接4、设置所有IP都可以运行连接进入容器内 修改配置文件关闭容器…...
leetcode:205. 同构字符串(python3解法)
难度:简单 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字…...
【Javascript Day9】对象定义、数组中对象元素排序、对象在内存中存储方法、对象构建联系
目录 . 取值运算符 > 用于对象属性或方法的调用操作 [] 取值运算符 > 可用于数组下标或者对象属性的取值操作 数组对象的排序 对象在内存中存储方式 对象的三种定义方式 1. 字面量对象 2. 基于Object构造对象 3. 自定义对象构造器创建对象 对象的构建练习 . 取值…...
运维作业一
1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 首先,获得随机字符,需下载pwgen&am…...
数仓建模(三)建模三步走:需求分析、模型设计与数据加载
本文包含: 数据仓库的背景与重要性数据仓库建模的核心目标本文结构概览:需求分析、模型设计与数据加载 目录 第一部分:需求分析 1.1 需求分析的定义与目标 1.2 需求分析的步骤 1.2.1 业务需求收集 1.2.2 技术需求分析 1.2.3 成果输出…...
C语言的网络编程
C语言的网络编程 引言 随着互联网的快速发展,网络编程已经成为计算机科学与技术领域中不可或缺的一部分。C语言作为一种底层语言,以其高效、快速和灵活的特性,广泛应用于网络编程中。本文将深入探讨C语言在网络编程中的应用,包括…...
EE213 Lab3 virtuoso NAND NOR INV XOR HA designlayout(min size layout method)
目录 0 前言 1 设计目标 2 减小面积的layout画法 3 NAND 4 NOR 5 INV 6 XOR 7 HA 0 前言 记录一下来到skd上的强度比较大的一门课,数字集成电路2的lab设计还是蛮好的,该帖非详细教程只是单纯的写一些思虑并用作笔记,新手小白欢迎交…...
Qt——QTableWidget 限制单元格输入范围的方法(正则表达式输入校验法、自定义代理类MyItemDelegrate)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》...
mono3d汇总
lidar坐标系 lidar坐标系可以简单归纳为标准lidar坐标系和nucense lidar坐标系,参考链接。这个坐标系和车辆的ego坐标系是一致的。 标准lidar坐标系 opendet3d,mmdetection3d和kitt都i使用了该坐标系 up z^ x front| /| /left y <------ 0kitti采…...
机器学习第一道菜(一):线性回归的理论模型
机器学习第一道菜(一):线性回归的理论模型 一、问题:千金买笑1.1 散点图1.2 机器学习能搞啥 二、模型的建立2.1 线性回归2.2 回归模型 前面讲了机器学习的“四大绝技”,今天,开始研究第一绝技“回归”&…...
Unity的Transform类
1.position 游戏对象的世界坐标以(0, 0, 0)为原点 2.localPosition 本地坐标,相对父物体坐标 3.eulerAngles 相对世界的欧拉角 4.localEulerAngles 本地欧拉角 5.rotation 相对世界四元数 6.localRotation 本地四元…...
指针的进阶
指针的主题,我们在初级阶段的《指针》章节已经接触过了,我们知道了指针的概念: 1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 2. 指针的大小是固定的4/8个字节(32位平台/64位平台࿰…...
每日学习30分轻松掌握CursorAI:Cursor插件系统与扩展功能
Cursor插件系统与扩展功能 一、课程概述 今天我们将学习Cursor AI的插件系统,了解如何通过插件扩展和增强IDE功能。由于Cursor AI基于VS Code开发,我们可以利用丰富的VS Code插件生态系统。 1.1 学习目标 了解插件系统原理掌握插件安装管理使用常用开…...
【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS
文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识(如加密、签名、证书等)&…...
Dexie.js内存管理技巧:在大型数据集操作中避免浏览器崩溃
Dexie.js 内存管理技巧:避免浏览器崩溃 在使用 Dexie.js 操作 大型数据集 时,如果不注意内存管理,可能会导致浏览器内存溢出(OOM,Out of Memory)或崩溃。因此,以下 内存管理技巧 可用于优化性能…...
vscode项目依赖问题
必读 一定要将前端下拉的项目备份一下,很容易运行导致依赖报错,重新下载 命令 使用幽灵分解器安装 pnpm install 替代 npm install 设置淘宝NPM镜像源 yarn config set registry https://registry.npmmirror.com 查看目前依赖包的版本 npm list ant-d…...
LLMs之RAG:《EdgeRAG: Online-Indexed RAG for Edge Devices》翻译与解读
LLMs之RAG:《EdgeRAG: Online-Indexed RAG for Edge Devices》翻译与解读 导读:这篇论文针对在资源受限的边缘设备上部署检索增强生成 (RAG) 系统的挑战,提出了一种名为 EdgeRAG 的高效方法。EdgeRAG 通过巧妙地结合预计算、在线生成和缓存策…...
宇泰串口卡驱动在Ubuntu22.04编译、安装汇总
从官网下载驱动官网地址 上传到Ubuntu, 目录结构如下: 驱动源代码: 驱动代码是基于开源项目编译来的 编译路径不能有中文路径,否则可能有类似错误 源码是基于Linux2.3内核编译,我当前是6.8.0-51,数据结构有升级,需要调…...
python管理工具:conda部署+使用
python管理工具:conda部署使用 一、安装部署 1、 下载 - 官网下载: https://repo.anaconda.com/archive/index.html - wget方式: wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh2、 安装 在conda文件的…...
(三)html2canvas将HTML 转为图片并实现下载
将 HTML 转为图片并实现下载,通常可以使用一个叫做 html2canvas 的 JavaScript 库。html2canvas 能够将 HTML 元素及其样式渲染成一个画布 (Canvas),然后将该画布转换为图片格式(如 PNG 或 JPEG),最终提供下载功能。 …...