Python教程(四)参数提取pymysql
Python(四)
本系列其他教程:
Python教程(二):函数、异常、模块&包、文件读取、常用模块
Python教程(三):类&对象、闭包、装饰器、类型注解
Python教程(三):类&对象、闭包、装饰器、类型注解、MRO
文章目录
- Python(四)
- 一、shell脚本调用python并传递参数
- 1.1 shell中调用python脚本
- 1.2 python中获取参数
- 方法一
- 方法二
- 1.3 综合实例
- 二、操作SQL
- 2.1 创建连接&获取游标
- 2.2 执行查询类SQL
- 2.3 执行非查询类SQL
一、shell脚本调用python并传递参数
1.1 shell中调用python脚本
r=`/home/Python-3.9/bin/python3.9 /disk3/dictauto_review_2.py -p "my_product" -c "12345" -m "user"`
echo ${r}
解释:
- my_product、12345、user都是shell脚本中定义的变量,也可以使用
-p ${product}
传递不定参数 -p ${product}
:将变量product
的值传递给参数-p
,在python中获取-p的值就能得到传递的参数- 此代码首先会执行python脚本,然后将执行的python脚本的输出赋值给变量r,然后打印python的输出(即r)
- 在 Shell 中,反引号用于将命令的输出作为字符串赋值给变量
- 只想执行 Python 脚本而无需捕获其输出,则可以省略反引号和要赋值的变量
1.2 python中获取参数
方法一
使用 sys.argv
,sys.argv
是一个列表,其中包含传递给 Python 脚本的命令行参数。要使用此方法,按照以下步骤操作:
- 在 Python 脚本 hello.py 中,导入
sys
模块:
import sys
- 访问
sys.argv
列表以获取参数:
# 获取第一个参数
first_arg = sys.argv[1]# 获取第二个参数
second_arg = sys.argv[2]
# 使用 python hello.py '参数1' '参数2' 即可传递参数
方法二
使用 argparse
模块,argparse
模块提供了一种更高级的方法来解析命令行参数。它允许定义参数的名称、类型、帮助信息等。要使用此方法,按照以下步骤操作:
- 在 Python 脚本中,导入
argparse
模块:
import argparse
- 创建一个
argparse.ArgumentParser
对象:
parser = argparse.ArgumentParser()
- 使用
add_argument()
方法定义参数:
parser.add_argument("-p", "--product", help="Product name")
parser.add_argument("-c", "--commit-id", help="Commit ID")
parser.add_argument("-m", "--email", help="Email address")
解释:
parser.add_argument()
是argparse
模块中用于定义命令行参数的方法。parser.add_argument("-p", "--product", help="Product name")
表示将传递过来的-p参数传递给product,并自动在 Python 脚本中定义一个名为product
的命令行参数(注意不是普通变量)。所以之后想要从python脚本中获取-p参数时不能使用-p,要使用product,详见下述。
- 使用
parse_args()
方法解析参数:
args = parser.parse_args()
- 访问参数值:
# 左边是python普通变量,右侧是命令行参数
product = args.product
commit_id = args.commit_id
email = args.email
例如,在上述的shell脚本示例中,可以使用以下代码获取传递的参数:
import argparseparser = argparse.ArgumentParser()
parser.add_argument("-p", "--product", help="Product name")
parser.add_argument("-c", "--commit-id", help="Commit ID")
parser.add_argument("-m", "--email", help="Email address")args = parser.parse_args()product = args.product
commit_id = args.commit_id
email = args.email
1.3 综合实例
Shell脚本:
script=${ScriptName}
port=${YourPhonePort}
ip=${YourPhoneIP}r=`/usr/local/bin/python3 runScript.py -s ${script} -i ${ip} -p ${YourPhonePort}`
echo ${r}
Python代码:
import subprocess
import argparse parser = argparse.ArgumentParser() # 添加命令行参数
parser.add_argument("-s", "--scriptName", help="Product name")
parser.add_argument("-i", "--phoneIP", help="Commit ID")
parser.add_argument("-p", "--phonePort", help="Email address") # 解析参数
args = parser.parse_args() # 赋值变量
scriptName = args.scriptName
phoneIP = args.phoneIP
phonePort = args.phonePort cmd_run = r'airtest run Android/' + scriptName + r' --device Android://127.0.0.1:5037/' + phoneIP + r':' + phonePort + ' --log' subprocess.call(cmd_run, shell=True)
-
subprocess.call
是 Python 的subprocess
模块中的一个函数,用于运行外部命令并等待命令执行完成。-
如果
shell=True
,则表示命令会通过shell执行。 -
重定向命令输出:
import subprocesswith open("output.txt", "w") as f:retcode = subprocess.call("ls -l", shell=True, stdout=f) print("Return code:", retcode) # 在这个例子中,subprocess.call 将 ls -l 命令的输出重定向到文件 output.txt 中
-
指定命令工作目录:
import subprocess# 指定users目录 retcode = subprocess.call("ls -l", shell=True, cwd="/users") print("Return code:", retcode) # 在这个例子中,subprocess.call 在 /users 目录下执行 ls -l 命令。
-
二、操作SQL
- 首先通过pip安装:pip install pymysql。
- 通过pymysql操作数据库的通用步骤:
- 创建数据库连接对象。
- 通过数据库连接对象获取游标。
- 通过游标的
execute()
方法执行sql语句。(execute方法的返回值是影响的行数) - 如果游标执行的是查询语句,则
execute()
之后会将数据保存在游标对象内部,然后游标对象调用fetch()
方法获取查询结果。- 如果使用同一个游标对象来执行多个查询(execute方法),则每次查询后游标之前的查询结果都会被覆盖,所以需要把每次查询的结果保存到变量中再执行下一次查询。
- 游标每次读取后(fetch方法),都会将指针移到下一行数据,只有重置游标位置才能重复读取已经被读取过的数据。
- 如果游标执行的是增删改对表数据有影响,则执行完
execute()
之后需要使用数据库连接对象执行commit()
方法提交事务。- 最好把执行SQL语句放到捕获异常中,如果发生了异常,通过数据库连接对象执行
rollback()
方法来回滚。
- 最好把执行SQL语句放到捕获异常中,如果发生了异常,通过数据库连接对象执行
- 执行完成之后需要关闭数据库连接对象和游标对象。
2.1 创建连接&获取游标
from pymysql import *# 创建连接对象
conn1 = Connection(host='test.com',port=3306,user='test',password='test',database='testTable'
)# 打印数据库信息
print(conn1.get_host_info()) # socket test.com:3306
print(conn1.get_server_info()) # 5.7.31# 获取游标对象,用来执行SQL
myCursor = conn1.cursor()# 通过游标执行SQL...# 使用完之后要关闭连接和游标
myCursor.close()
conn1.close()
2.2 执行查询类SQL
- 此时表中只有两行数据。
- 游标的
fetchone()
方法用来读取一行数据;fetchall()
方法提取当前游标位置→结尾的数据。
from pymysql import *# 创建连接对象,之后操作的都是该对象
conn1 = Connection(host='test.com',port=3306,user='test',password='test',database='testTable'charset='utf8mb4'
)# 获取游标对象,用来执行SQL,一定是通过游标来执行SQL
myCursor = conn1.cursor()try:myCursor.execute("select * from gqzTest")# 使用游标对象读取第一行数据result1 = myCursor.fetchone()# 再次调用读取下一行数据,此时已经把游标的所有数据都读完了result2 = myCursor.fetchone()# 读取空的游标result3 = myCursor.fetchall()print(result1) # (1, 'user3', 'user3@example.com')print(result2) # (6, 'Jay', 'user2@example.com')print(result3) # ()# 重新执行execute方法,会把游标的内容覆盖,数据又出现了myCursor.execute("select * from gqzTest")result4 = myCursor.fetchall()print(result4) # (1, 'user3', 'user3@example.com'), (6, 'Jay', 'user2@example.com')except Exception as e:print(e)
finally:# 使用完之后要关闭连接和游标myCursor.close()conn1.close()
补充:
cursor.rowcount # 获取游标中结果的行数
cursor.rownumber # 获取当前游标的位置,从0开始
cursor.fetchall() # 获取的是当前游标位置→结尾的所有数据
cursor.rownumber = 0 # 将游标位置置为0,就可以从头获取数据
2.3 执行非查询类SQL
from pymysql import *# 创建连接对象,之后操作的都是该对象
conn1 = Connection(host='test.com',port=3306,user='test',password='test',database='testTable'charset='utf8mb4'
)# 获取游标对象,一定是通过游标来执行SQL
myCursor = conn1.cursor()try:# 插入一条数据myCursor.execute("INSERT INTO gqzTest (username, email) VALUES ('user2', 'user2@example.com');")# 更新数据mySql = "UPDATE gqzTest SET username = %s WHERE email = %s"values = ('Jay', 'user2@example.com')myCursor.execute(mySql, values)# 执行事务conn1.commit()
except Exception as e:print(e)# 如果出错整个事务回滚conn1.rollback()
finally:# 使用完之后要关闭连接和游标myCursor.close()conn1.close()
-
如果想要让代码自动提交事务,在创建数据库连接对象时添加
autocommit=True
:conn1 = Connection(host='test.com',port=3306,user='test',password='test',database='testTable'charset='utf8mb4',autocommit=True # 无需手动提交事务 )
相关文章:
Python教程(四)参数提取pymysql
Python(四) 本系列其他教程: Python教程(二):函数、异常、模块&包、文件读取、常用模块 Python教程(三):类&对象、闭包、装饰器、类型注解 Python教程(三):类&对象、闭包、装饰器、类型注解、…...
Halcon案例(一):C#联合Halcon识别路由器上的散热孔
本案例分3部分 识别效果,分别显示识别前后识别后;代码展示,分别是Halcon源码和Halcon转为C#的代码代码解释(解释在源码中) 原图如下: 处理后的图像: Halcon源码: *读取一张图像 read_image (Image, progres)*获取图像大小 get_image_size (Image, Width, Height)*关…...
SC5061串口设备联网服务器,4路RS-232,4路422/485串行接口
串口设备联网服务器,简称串口服务器。能够将RS-232/485/422串口设备联入TCP/IP网络,实现RS-232/485/422串口与TCP/IP网络接口的数据双向传输,使得串口设备能够具备联网功能,根据串口数量的不同,可以分为单串口、两串口…...
谈AI/OT 的融合
过去的十几年间,工业界讨论最多的话题之一就是IT/OT 融合,现在,我们不仅要实现IT/OT 的融合,更要面向AI/OT 的融合。看起来不太靠谱,却留给我们无限的想象空间。OT 领域的专家们不要再当“九斤老太”,指责这…...
RAGFlow 初步尝试 (01)
1. 起因, 目的: 简单尝试一下。 2. 先看效果 3. 过程: 目的: 研究 RAG 的实现过程。 实用目的: 对于一本电子书, pdf,我在读书的时候,可以问一写些问题。对一个 github 项目,可以迅速理解文件的关系。…...
Linux 服务器用 SSH 拉取多个 Git 工程
在一台 Linux 服务器上用 SSH 拉取两个 Git 工程,而这两个工程对应的是 不同的 Git 账号(SSH Key),做法: 使用 SSH Config 配置多个 Git 账号 场景假设: 工程 A 的仓库地址:gitgithub.com:com…...
测试文章标题01
模型上下文协议(Model Context Protocol, MCP)深度解析 一、MCP的核心概念 模型上下文协议(Model Context Protocol, MCP)是一种用于规范机器学习模型与外部环境交互的标准化框架。其核心目标是通过定义统一的接口和数据格式&am…...
如何禁止chrome自动更新
百度了一下 下面这个方法实测有效 目录 1、WINR 输入 services.msc 2、在Services弹窗中找到下面两个service并disable 3、验证是否禁止更新成功: 1、WINR 输入 services.msc 2、在Services弹窗中找到下面两个service并disable GoogleUpdater InternalService…...
【C++重载操作符与转换】构造函数和复制控制
目录 一、构造函数:对象的初始化引擎 1.1 构造函数的定义与分类 1.2 初始化列表:高效且安全的初始化方式 1.3 显式构造函数与类型安全 二、复制控制:管理对象的生命周期 2.1 复制构造函数:深拷贝的核心 2.2 赋值运算符重载…...
CATIA高效工作指南——常规配置篇(二)
一、结构树(Specification Tree)操作技巧精讲 结构树是CATIA设计中记录模型历史与逻辑关系的核心模块,其高效管理直接影响设计效率。本节从基础操作到高级技巧进行系统梳理。 1.1 结构树激活与移动 激活方式: 白线…...
神经生物学+图论双buff,揭示大脑语言系统的拓扑结构
摘要 近年来,神经影像数据分析的进展促进了大脑网络整合中适应性变化的表征。本研究提出了一种融合知识驱动与数据驱动的独特方法,为更精确地理解这些变化提供了新思路。通过运用图网络分析,并结合特定领域脑网络系统的现有神经生物学知识&am…...
Kotlin 懒初始化值
Kotlin 懒初始化值:深入理解 lateinit 与 by lazy 在 Kotlin 开发中,懒初始化(Lazy Initialization) 是一种常见的优化技巧,它允许我们将对象的初始化延迟到真正需要使用时再执行。Kotlin 提供了两种核心机制来实现懒…...
高速系统设计实例设计分析
在上几章的内容中,我们从纯粹高速信号的理论分析,到 Cadence 工具的具体使用都做了详细的讲解和介绍。相信读者通过前面章节的学习,已经对高速系统的设计理念及 Cadence 相应的设计流程和工具有了一个基本的认识。但是,对于高速电…...
数据结构与算法学习-JavaScript的Array.prototype.reduce()方法
一、语法 array.reduce(callbackfn, initialValue);callbackfn (accumulator, currentValue, currentIndex, array) > {// 回调逻辑 } callbackFn 为数组中每个元素执行的函数。 其返回值将作为下一次调用 callbackFn 时的 accumulator 参数。对于最后一次调用,…...
[Java][Leetcode simple] 189. 轮转数组
借助辅助数组 借助一个辅助数组tmp保存后面k个元素然后逆序循环,使用数组前面n-k个元素覆盖最后到后面最后把前k个元素从tmp中拿回来public void rotate(int[] nums, int k) {int len nums.length;k k % len;int[] Ra new int[len];int cnt 0;for (int i len-k…...
Hadoop 的代理用户(Proxy User) 功能解释
在$HADOOP_HOME/etc/hadoop下的core-site.xml 配置里,可以新增hadoop集群的代理用户。 在集成配置中,会经常用到。它属于 Hadoop 安全机制的一部分。 以下是对该配置效果的详细说明及示例: 配置效果 <!-- 允许用户 hadoop 从主机 hadoop…...
day06_java中的流程控制语句
流程控制语句 Java提供了一些流程控制语句,来控制程序的执行流程 顺序结构 任何编程语言中最常见的程序结构就是顺序结构顺序结构就是程序从上到下逐行地执行,中间没有任何判断和跳转如果main方法的多行代码之间没有任何流程控制,则程序总是…...
机器学习实战:归一化与标准化的选择指南
在机器学习实战中——是否需要归一化(Normalization)或标准化(Standardization),取决于所使用的模型类型。 ✅ LightGBM / XGBoost 是否需要归一化或标准化? 不需要。 🔧 原因: L…...
【内蒙古】《内蒙古自治区本级政务信息化建设项目预算支出标准(试行)》(内财预〔2024〕1449号)-费用标准解读系列
内蒙古自治区政务服务与数据管理局在2024年11月29日发布了《内蒙古自治区本级政务信息化建设项目预算支出标准(试行)》(内财预〔2024〕1449号)。该文件适用于自治区本级各部门、单位非涉密政务信息化建设项目(以下简称建设项目)经费的预算编制、审核。下…...
文本数据可视化
目录 【实验目的】 【实验原理】 【实验环境】 【实验步骤】 原理 操作步骤 图像展示 【实验目的】 了解什么是文本可视化 掌握文本可视化的相关技术 文本信息的提取和可视表达 本次实验是将某一文本进行可视化生成词云图片 尝试构造文本指纹 【实验原理】…...
qt命名空间演示
#ifndef CIR_H #define CIR_Hnamespace cir {double PI3.141592653;//获取圆行周长double getLenthOfCircle(double radius){return 2*PI*radius;}//获取圆形面积double getAreaOfCircle(double radius){return PI*radius*radius;}} #endif // CIR_H#include <iostream> …...
Android学习总结之布局篇
一、大厂面试高频布局真题解析 1. ConstraintLayout vs RelativeLayout 深度对比 真题问法: "为什么说 ConstraintLayout 是 RelativeLayout 的替代方案?两者在布局原理、性能、复杂场景处理上有什么核心区别?" 核心考点解析&am…...
星际篮球争霸赛/MVP争夺战 - 华为OD机试真题(A卷、Java题解)
华为OD机试题库《C》限时优惠 9.9 华为OD机试题库《Python》限时优惠 9.9 华为OD机试题库《JavaScript》限时优惠 9.9 针对刷题难,效率慢,我们提供一对一算法辅导, 针对个人情况定制化的提高计划(全称1V1效率更高)。 看…...
RNN(循环神经网络)原理与结构
1 RNN(循环神经网络)原理与结构 循环神经网络(Recurrent Neural Network, RNN)是一类专门用于处理序列数据(如时间序列、文本、语音等)的深度学习模型。与传统的前馈神经网络不同,RNN在每个时间…...
Claude深度解析:从技术原理到实战应用的全栈指南
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言:AI编程新纪元中的Claude 在生成式AI技术爆发的2024年,Anthropic的Claude系列模型以卓越的长文本处理能力和精确的代码生成质量,正在重塑程序员的开发范式。当开发者…...
9.渐入佳境 -- 套接字的多种可选项
前言 套接字具有多种特性,这些特性可通过可选项更改。本章将介绍更改套接字可选项的方法,并以此为基础进一步观察套接字内部。 一、套接字可选项和I/O缓冲大小 我们进行套接字编程时往往只关注数据通信,而忽略了套接字具有的不同特性。但是…...
AI日报 - 2024年05月13日
🌟 今日概览 (60秒速览) ▎🚀 技术突破 | Flow-GRPO将在线RL引入流匹配模型,提升性能并降低训练成本;「层内循环」(ILR)技术无需增加参数即可提升Transformer性能。▎💬 行业热议 | ICML强制作者参会政策引发广泛争议…...
开发工具分享: Web前端编码常用的在线编译器
1.OneCompiler 工具网址:https://onecompiler.com/ OneCompiler支持60多种编程语言,在全球有超过1280万用户,让开发者可以轻易实现代码的编写、运行和共享。 OneCompiler的线上调试功能完全免费,对编程语言的覆盖也很全&#x…...
Android学习总结之线程池篇
一、线程池参数调优实战真题 真题 1:直播 APP 弹幕加载线程池设计 题目描述:直播 APP 需要实时加载弹幕数据(网络请求,IO 密集型),同时渲染弹幕视图(UI 操作需切主线程)࿰…...
03.Golang 切片(slice)源码分析(二、append实现)
Golang 切片(slice)源码分析(二、append实现) 前言: Golang 切片(slice)源码分析(一、定义与基础操作实现) 在前面的文章我们介绍了,切片的结构体与创建\扩容…...
Python实例题:pygame开发打飞机游戏
目录 Python实例题 题目 pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本 代码解释 初始化部分: 游戏主循环: 退出部分: 运行思路 注意事项 Python实例题 题目 pygame开发打飞机游戏 pygame-aircraft-game使用 Pygame 开发…...
MySQL创建了一个索引表,如何来验证这个索引表是否使用了呢?
MySQL创建了一个索引表,如何来验证这个索引表是否使用了呢? 1. 使用 EXPLAIN 分析查询执行计划 在 SQL 查询前添加 EXPLAIN 关键字,查看 MySQL 优化器是否选择了你的索引。 示例: EXPLAIN SELECT * FROM db关键输出字段: typ…...
Go语言多线程爬虫与代理IP反爬
有个朋友想用Go语言编写一个多线程爬虫,并且使用代理IP来应对反爬措施。多线程在Go中通常是通过goroutine实现的,所以应该使用goroutine来并发处理多个网页的抓取。然后,代理IP的话,可能需要一个代理池,从中随机选择代…...
Linux文件编程:操作流程与内核机制
在 Linux 操作系统中,一切皆文件,这意味着从硬盘上的数据文件、设备驱动、到管道、套接字等都以文件的形式存在。Linux 的文件系统将这些不同类型的文件统一抽象成文件对象,允许程序通过文件描述符来访问它们。 一、核心概念解析 文件描述符…...
用短说社区搭建的沉浸式生活方式分享平台
你是否想打造一个融合小红书式种草基因与论坛深度互动的全新社区?本文依托短说社区论坛系统的社区功能规划,一起来规划,如何搭建一个集内容分享、社交互动、消费决策于一体的沉浸式生活社区。 短说社区的界面样式支持普通资讯列表或瀑布流列…...
【ASR学习笔记】:语音识别领域基本术语
一、基础术语 ASR (Automatic Speech Recognition) 自动语音识别,把语音信号转换成文本的技术。 VAD (Voice Activity Detection) 语音活动检测,判断一段音频里哪里是说话,哪里是静音或噪音。 Acoustic Model(声学模型࿰…...
2025年best好用的3dsmax插件和脚本
copitor 可以从一个3dsmax场景里将物体直接复制到另一个场景中 Move to surface 这个插件可以将一些物体放到一个平面上 instancer 实体器,举例:场景中有若干独立的光源,不是实体对象,我们可以使用instancer将他变成实体。 paste …...
电厂除灰系统优化:时序数据库如何降低粉尘排放
在环保要求日益严苛的当下,电厂作为能源生产的重要主体,其除灰系统的运行效率与粉尘排放控制效果紧密相关。传统除灰系统在数据处理和排放控制方面存在一定局限性,而时序数据库凭借对时间序列数据的高效存储、处理和分析能力,为电…...
upload-labs通关笔记-第2关 文件上传之MIME绕过
目录 一、MIME字段 1. MIME 类型的作用 2. 常见的 MIME 类型 二、实验准备 1.构造脚本 2.打开靶场 3.源码分析 三、修改MIME字段渗透法 1.选择shell脚本 2.bp开启拦截 3.上传脚本bp拦包 4.bp改包 5.获取脚本地址 6.获取木马URL 7.hackbar渗透 8.蚁剑渗透 本文通…...
未来技术展望:光子量子计算集成与连续变量可视化
光子量子计算作为量子计算的重要分支,凭借其独特的光子传输优势和连续变量编码方式,正在量子计算领域掀起新的技术革命。以Xanadu公司的Borealis光量子处理器为代表,连续变量量子计算的可视化技术将面临全新的挑战与机遇。以下从技术适配、可视化方法及工具开发三个维度展开…...
vite项目使用i18n-ally未读取到文件
前言 在使用 Vue CLI 创建的Vue 3项目中,语言文件(src/lang/zh.js和en.js)正常加载。 .vscode/settings.json如下:i18n-ally.enabledParsers中增加了js {"i18n-ally.localesPaths": ["src/i18n","src/…...
yarn workspace使用指南
作用 Yarn workspace 是 Yarn 包管理工具中的一个功能,主要用于管理多包项目(monorepo)。它的主要作用如下: 支持多包结构:允许在一个仓库中管理多个独立的包或项目。项目间依赖管理:方便地在不同包之间添…...
Spring Boot 参数验证
一、依赖配置 首先确保在 pom.xml 中添加了以下依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 这个依赖包含了 Hibernate Valida…...
Electron学习大纲
Electron 实际工作学习大纲路线,结合技术原理、实战开发与工程化最佳实践,分为 5 大核心阶段,每个阶段包含关键知识点和实践目标,帮助快速掌握桌面应用开发能力: 阶段一:Electron 基础与环境搭建(1-2周) 核心概念与架构Electron 组成: 主进程(Main Process):控制应…...
Linux 系统中设置开机启动脚本
Linux 系统中设置开机启动脚本有多种方法,适用于不同的场景和需求。以下是几种最常用且详细的方法: 核心理念: 无论哪种方法,核心都是让系统在启动过程中的某个阶段执行你的脚本。 1. 使用 systemd (推荐,现代 Linux 发行版的标准) systemd 是目前大多数主流 Linux 发行…...
如何解决Deepseek服务器繁忙的问题?
在现如今互联网技术飞速发展的时代,AI技术也逐渐开始兴起,Deepseek作为一款强大的AI工具,可以帮助各个行业的用户高效的处理复杂任务,但是,用户在使用这一工具的过程中,可能会遇到服务器繁忙的问题…...
四、STM32 HAL库API完全指南:从功能分类到实战示例
STM32 HAL库API完全指南:从功能分类到实战示例 一、HAL库API的总体架构 STM32 HAL库(Hardware Abstraction Layer)作为STMicroelectronics推出的统一驱动框架,提供了覆盖所有STM32外设的标准化API。HAL库的API设计遵循严格的分层…...
集成学习——Bagging,Boosting
一.什么是集成学习 集成学习的基本思想是通过结合多个基学习器的预测结果,来提高模型的泛化能力和稳定性。这些基学习器可以是相同类型的算法,也可以是不同类型的算法。 当基学习器之间具有一定的差异性时,它们在面对不同的样本子集或特征子…...
如何有效追踪需求的实现情况
有效追踪需求实现情况,需要清晰的需求定义、高效的需求跟踪工具、持续的沟通反馈机制,其中高效的需求跟踪工具尤为关键。 使用需求跟踪工具能确保需求实现进度可视化、提高团队协作效率,并帮助识别和管理潜在风险。例如,使用专业的…...
网页Web端无人机直播RTSP视频流,无需服务器转码,延迟300毫秒
随着无人机技术的飞速发展,全球无人机直播应用市场也快速扩张,从农业植保巡检到应急救援指挥,从大型活动直播到智慧城市安防,实时视频传输已成为刚需。预计到2025年,全球将有超过1000万架商用无人机搭载直播功能&#…...