利用 Python pyttsx3实现文字转语音(TTS)
今天,我想跟大家分享如何利用 Python 编程语言,来实现文字转换为语音的功能,也就是我们常说的 Text-to-Speech (TTS) 技术。
你可能会好奇,为什么学习这个?想象一下,如果你想把书本、文章、杂志的内容转换为语音来“听”,而不是单纯地“看”,这个技术就能派上用场。或者,如果你正在开发一个跨平台的系统,需要整合定制化的语音服务,TTS 也能提供强大的支持。甚至,如果你手头已经有写好的脚本,想快速转换为视频的旁白声音,TTS 也能大幅加快你的工作速度。
现在市面上其实已经有很多成熟的 TTS 服务了。比如说,Google 就提供相当高质量的 TTS 服务,发音自然,速度也快。不过,一旦超出了免费使用额度,就需要付费。台湾也有本地化的选择,像是“雅婷文字转语音”,它更贴近台湾口音,对于服务本地用户非常有帮助。这些商用服务质量通常比较好,处理速度也快。
但是,如果你的需求是比较轻量级的,例如只是想为自己打造一个小工具,或者开发一个不需要大规模部署的小型服务,那么使用 Python 的 pyttsx3 套件就会是一个非常方便且免费的选择。这个套件提供了相当完整的 API 文档,我个人觉得用起来非常直观。你可以去查询它的官方文档,我在文末也会提供相关链接或搜索提示。
好了,话不多说,我们来看看如何实际使用 pyttsx3 吧。
要使用这个套件,第一步当然是先安装它。安装很简单,通常就是通过 pip 指令。确认安装好之后,我们就可以在 Python 环境中开始写代码了。为了方便演示,我选择在 Jupyter Notebook 的环境下来进行。
首先,我们需要把 pyttsx3 套件导入到代码中:
import pyttsx3
接着,我会定义一个变量 txt,把我们想要转换为语音的文字放在里面。这里先用一个简单的例子:
txt = "Hello Ryan"
再来,我们需要一个“引擎”来帮我们做转换的工作。我定义一个变量 engine 来代表这个对象:
engine = pyttsx3.init()
初始化好引擎之后,之后的所有操作,几乎都是通过这个 engine 变量来进行。
下一步,我们告诉引擎要“说出”什么文字。套件提供了一个很直白的函数叫做 say():
engine.say(txt)
最后,也是关键的一步,调用 runAndWait() 函数。这个函数会执行语音转换的过程,并且会等待声音播放完毕:
engine.runAndWait()
好,到这里基本的操作就完成了。执行这段代码,你应该就能听到你的电脑将 "Hello Ryan" 这几个字说出来了。
不过,你可能会发现,默认的语音听起来速度好像有点快,而且语调不一定是最理想的。别担心,pyttsx3 允许我们进行调整。
前面提到,pyttsx3 的 API 文档很有用。通过查阅文档,我们可以找到像 getProperty() 这样的函数,用来获取引擎目前的属性设置。常用的属性有四种:语速 (rate)、语音 (voice)、可用的语音列表 (voices) 和音量 (volume)。
其中,rate 代表说话的速度。如果没有特别设置,默认值通常是每分钟 200 个字。
而 voices 会列出所有我们系统上可用的语音选项。这个列表是会根据你的操作系统而有所不同的。比如说,我目前用的是 Apple 的 macOS 系统,所以在列表中看到的语音 ID 会是 apple 开头的。
列表里面列出了很多语音选项,它们代表不同的语言和发音人。你可以通过 getProperty('voices') 来查看你系统上提供了哪些语音。每一个语音都有一个独特的 ID。
假设我在列表中看到一个名字叫做 samantha 的语音,它的语言是英文。我想使用这个语音来发音,并且希望速度慢一点,让声音更清晰。我可以这样设置:
首先,使用 setProperty() 函数来设置属性值:
voice_id = "你的英文语音ID,例如 apple speect:Samantha" # 替换成你系统上实际的英文语音ID
engine.setProperty('voice', voice_id)
然后,设置语速。因为 "Hello Ryan" 只有两个单词,说太快一下就过去了,我把语速调低一点,例如设置为 50:
engine.setProperty('rate', 50) # 设置语速为每分钟 50 字
设置完成后,再执行 say 和 runAndWait:
engine.say("Hello mike")
engine.runAndWait()
听起来是不是比刚才好多了?
你也可以尝试其他的语音设置。像我试过一个 ID 叫做 Fred 的语音设置,据说这是 1984 年乔布斯介绍第一台 Macintosh 电脑时,第一次使用电脑将文字转换为语音时的发音。虽然听起来年代感十足,但还挺清晰的。这就展现了选择不同语音的多样性。
除了直接在代码中写死文字,很多时候我们需要读取外部文件中的文字。pyttsx3 也完全支持这一点。
我可以在设置好属性的代码下方,加入读取文件的部分。我使用 Python 常用的 with open() 关键字来打开一个已经准备好的文字文件(假设我把文字内容储存在 my_article.txt 这个文件里)。我给这个打开的文件对象取名为 file。
接着,我使用一个 for 循环,一行一行地读取文件中的文字。在让引擎读出文字之前,我习惯先把它打印出来看看,确保读取的是正确的内容。
with open('my_article.txt', 'r', encoding='utf-8') as file: # 请注意编码设置for line in file:print(line.strip()) # 打印出该行文字engine.say(line) # 将该行文字加入待朗读队列
读取完成后,别忘了最后调用 engine.runAndWait() 让引擎开始读:
engine.runAndWait()
我前面大部分演示都用了英文,现在来试试看中文的转换效果如何。要读中文,最好是将 voice 设置为中文的语音。语速方面,中文的速度感和英文不太一样,我设置为每分钟 120 个字试试看。
文字文件的内容,我找了一段中文文章的片段作为范例。这段文字可能来自一篇关于媒体转型、如何应对社交媒体挑战的讨论。将这段中文贴入文字档后,运行代码:
chinese_voice_id = "你的中文语音ID,例如 com.apple.ttsbundle.zh-CN_Yu-Mai" # 替换成你系统上的中文语音ID,注意可能需要找zh-CN开头的ID
engine.setProperty('voice', chinese_voice_id)
engine.setProperty('rate', 120) # 设置中文语速with open('chinese_article.txt', 'r', encoding='utf-8') as file:for line in file:print(line.strip())engine.say(line)engine.runAndWait()
听听看效果如何。你会发现这组语音设置是我们经常听到的中文发音。除了我系统上的腔调,通常还会有其他中文发音选项(例如香港的粤语发音等),你可以根据需求自由选择。
pyttsx3 支持的语音语言非常多样,像是韩语、德语、日语等等。最好的实践就是根据你要转换的文字的语言,设置对应语言的语音,这样说出来的效果才是最自然的。你可以通过 getProperty('voices') 来探索所有你系统上支持的语言和语音。
我在日本福冈生活和工作了一段时间,我想测试一下日语的 TTS 效果如何,顺便分享一个我觉得很漂亮的景点——海中道海浜公园。特别是秋天,那里的花季非常美。这个公园很大,很适合亲子或朋友一起去散步。
我在福冈市政府的官网找到一段介绍这个公园的日文文字,将它复制贴到一个文字文件中。然后将语音设置改为日语发音,语速可以适当调整。
japanese_voice_id = "你的日语语音ID,例如 com.apple.ttsbundle.ja_JP_Kyoko" # 替换成你系统上的日语语音ID
engine.setProperty('voice', japanese_voice_id)
engine.setProperty('rate', 150) # 设置日语语速with open('japanese_info.txt', 'r', encoding='utf-8') as file:for line in file:print(line.strip())engine.say(line)engine.runAndWait()
执行后,你就能听到这段日文被用日语发音朗读出来了。
除了直接播放语音,pyttsx3 还能将语音直接制作成文件。官方文档中有介绍,这也很简单,只要调用 save_to_file() 函数就行了。你可以指定输出文件名和文字内容,它会自动帮你保存成像是 mp3 或 wav 格式的音频文件。
output_file = "hello_ryan.mp3"
text_to_save = "Hello Ryan, this is a test."
engine.save_to_file(text_to_save, output_file)
engine.runAndWait() # 需要调用runAndWait来实际执行保存操作
print(f"语音已保存至 {output_file}")
这样就能方便地将文字转换成可重复使用的音频文件了。
总结来说,pyttsx3 这个套件可以帮助我们快速地实现文字转语音服务。它的应用场景很广泛。例如,我们可以结合 Google API,读取你的日程安排、Email 内容,让电脑用读的方式提醒你今天的行程或重要邮件。又或者,如果你有爬取体育数据、股市信息的自动化系统,可以整合 pyttsx3,让系统具备语音提醒的功能,变成一个带有语音服务的自动化工具。
如果你对这种整合多种功能、提升效率的自动化系统感兴趣,其实有很多资源可以学习 Python 的自动化技巧。例如,学习如何自动化文件管理、Excel、Word 等文档软件操作。将重复性的工作自动化,真的可以大幅提高你的工作效率,节省很多宝贵的时间。你可以去搜索相关的 Python 自动化课程或教学资源。
希望这篇文章对你有所帮助和启发!如果觉得有用,欢迎分享给需要的朋友。有任何问题或想法,也欢迎在评论区留言讨论。
相关文章:
利用 Python pyttsx3实现文字转语音(TTS)
今天,我想跟大家分享如何利用 Python 编程语言,来实现文字转换为语音的功能,也就是我们常说的 Text-to-Speech (TTS) 技术。 你可能会好奇,为什么学习这个?想象一下,如果你想把书本、文章、杂志的内容转换…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.1 描述性统计分析(均值/方差/分位数计算)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 5.1 描述性统计分析:均值、方差与分位数计算实战5.1.1 数据准备与分析目标数据集介绍分析目标 5.1.2 均值计算:从整体到分组分析总体均值计算加权均值…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.4 数据抽样(简单随机抽样/分层抽样)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:数据抽样核心技术解析5.4 数据抽样:从简单随机到分层策略的深度实践5.4.1 简单随机抽样:概率均等的基础抽样方法…...
时间同步服务核心知识笔记:原理、配置
一、时间同步服务 在 Linux 系统中,准确的时间至关重要。对于服务器集群,时间同步确保各节点间数据处理和交互的一致性,避免因时间差异导致的事务处理错误、日志记录混乱等问题。在分布式系统中,时间同步有助于协调任务调度、数据…...
Leetcode刷题记录32——搜索二维矩阵 II
题源:https://leetcode.cn/problems/search-a-2d-matrix-ii/description/?envTypestudy-plan-v2&envIdtop-100-liked 题目描述: 思路一: 💡 解题思路:利用矩阵有序特性 双指针法(Z 字形搜索&…...
【最新Python包管理工具UV的介绍和安装】
介绍 uv是一个非常快的 Python 包安装程序和 pip 解析器,用 Rust 编写,设计为pip-tools的直接替代品。 以下是官网给出的UV与其他包管理工具解决依赖(左)和安装包(右)的对比图。 可以看出UV是一个极快的 P…...
第二章-猜数游戏
猜数游戏 纸上得来终觉浅,绝知此事要躬行。实践才能出真知,因此本文内容将通过一个小项目快速帮我们上手Rust语言。其中可能会出现一些目前还不是很了解的知识,但没事,后续通过学习我们会慢慢了解的,现在我们先体会一…...
Go小技巧易错点100例(二十九)
随着 Go 语言的不断迭代,新版本带来了许多实用的标准库函数,使得代码更加简洁、可读性更强。本篇文章主要介绍 Go 1.21 版本中的一些新特性,涵盖 可变类型比较、slice 最大值与最小值、map 转换为 slice 以及 map 合并 等常见场景,…...
游戏开发的TypeScript(5)TypeScript的类型转换
TypeScript的类型转换 游戏开发中,事件经常会携带一些数据,而这些数据会做类型上的转化,在 这种情况下,类型转换(Type Assertion)能够让你手动把某个值指定为特定类型。这在 TypeScript 无法自动推断出正确…...
旋转图像(中等)
借助辅助矩阵来翻转: 第i行第j列的元素会出现在新矩阵的第j行倒数第i列。 class Solution {public void rotate(int[][] matrix) {int n matrix.length;int[][] matrix_new new int[n][n];for (int i 0; i < n; i) {for (int j 0; j < n; j) {matrix_ne…...
慢sql处理流程和常见案例
思维导图: 在 MySQL 数据库管理中,慢查询是影响系统性能的常见痛点。随着 MySQL 8 版本的普及,其新增特性(如 CTE、隐藏索引、JSON 格式执行计划等)为慢查询优化提供了更强大的工具。本文结合 MySQL 8 的特性,通过代码…...
Kubernetes控制平面组件:Controller Manager 之 内置Controller详解
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
E-R图作业
1.一个图书馆借阅管理数据库要求提供下述服务: (1)可随时查询书库中现有书籍的品种、数量与存放位置。所有各类书籍均可由书号惟一标识。 (2)可随时查询书籍借还情况,包括借书人单位…...
debuginfo详解
debuginfo 是 Linux 系统中存储调试符号和源代码信息的特殊软件包,用于分析内核或用户态程序的崩溃转储文件(如 vmcore、coredump)。它在调试复杂问题(如内核崩溃、程序段错误)时至关重要。以下是其核心作用、安装方法…...
Android学习总结之GetX库篇(场景运用)
状态管理 在一个复杂的 Flutter 应用里,怎样借助 GetX 管理多个相互关联的状态,并且保证代码的可维护性和性能? 考察点:对 GetX 状态管理的深入理解,以及在复杂场景下运用它的能力。 解答思路: 采用模块…...
android-ndk开发(5): 编译运行 hello-world
android-ndk开发(5): 编译运行 hello-world 2025/05/05 1. 概要 hello-world 是每一门语言的第一个样例程序, 跑通它, 在一段时间内你会相当顺畅: 可以边学边实验, 根据运行结果得到反馈。 而对于 android-ndk 开发而言&#…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】6.1 客户分群分析(RFM模型构建)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:RFM模型构建实现客户分群分析6.1 客户分群分析——RFM模型构建6.1.1 RFM模型核心指标解析6.1.2 数据准备与清洗规范数据表结构设计数据清…...
stm32之TIM定时中断详解
目录 1.引入1.1 简介1.2 类型1.2.1 基本定时器1.2.2 通用定时器1. 触发控制单元 (Trigger Control Unit)2. 输入捕获单元 (Input Capture Unit)3. 输出比较单元 (Output Compare Unit)4. CNT 计数器5. 自动重装载寄存器 (ARR)6. 预分频器 (PSC)7. 中断与 DMA 事件8. 刹车功能 (…...
【Hive入门】Hive安全管理与权限控制:用户认证与权限管理深度解析
目录 引言 1 Hive安全管理体系概述 2 Hive用户认证机制 2.1 Kerberos集成认证 2.1.1 Kerberos基本原理 2.1.2 Hive集成Kerberos配置步骤 2.1.3 Kerberos认证常见问题排查 2.2 LDAP用户同步 2.2.1 LDAP协议概述 2.2.2 Hive集成LDAP配置 2.2.3 LDAP与Hive用户同步架构…...
解决DNS劫持问题
什么是DNS劫持? DNS劫持(DNS Hijacking)是指通过篡改DNS配置,将用户的域名解析请求引导到恶意服务器的攻击方式。这种攻击常见于恶意软件、路由器漏洞或DNS配置被修改的情况下。攻击者通过这种方式控制了用户访问的网站ÿ…...
android-ndk开发(1): 搭建环境
android-ndk开发(1): 搭建环境 2025/05/05 1. 目的 写一些 C/C 代码, 例如 cv 基础算法, 并交叉编译到 android 平台。 不涉及 JNI、 Java、 Kotlin, 暂不涉及 rust。 基本上能适用于华为鸿蒙的 ohos ndk。 那么, 为了完成交叉…...
力扣面试150题-- 翻转二叉树
Day 41 题目描述 做法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right…...
开源模型应用落地-qwen模型小试-Qwen3-8B-推理加速-vLLM(一)
一、前言 随着大语言模型的参数规模持续膨胀,如何在有限算力下实现高效推理成为行业焦点。阿里云推出的Qwen3-8B,凭借其卓越的语言理解与生成能力,已在多个基准测试中展现竞争力。而vLLM框架作为大模型部署的“加速器”,通过PagedAttention实现内存的高效管理,并支持连续批…...
brep2seq kaggle安装 micromamba conda环境
https://github.com/zhangshuming0668/Brep2Seq Micromamba Installation — documentation !curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba A Synthetic CAD Models Dataset for Deep Learning kaggle只有20g,等我有…...
钩子函数和参数:Vue组件生命周期中的自定义逻辑
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
SpringBoot企业级开发之【文件上传】
看一下我们的需求: 接口文档: 分析思路: 现在我们先实现后端先: 实操: 一.存储到本地磁盘: 1.Controller 创建一个FileUploadController类 package org.huangyingyuan.controller;import org.huangyingyu…...
Linux系统安装PaddleDetection
一、安装cuda 1. 查看设备 先输入nvidia-smi,查看设备支持的最大cuda版本,选择官网中支持的cuda版本 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/conda/linux-conda.html 2. 下载CUDA并安装 使用快捷键…...
JVM 内存结构全解析
带你深入 JVM 内存结构,搞懂运行时数据区到底是怎么回事 JVM 的内存结构到底长什么样?程序计数器、虚拟机栈、堆、方法区、直接内存到底有什么用?这篇文章将从实际运行角度出发, 用一篇文章彻底讲透 JVM 的运行时数据区。一、为什么你必须搞懂 JVM 内存结构? 在一次线上…...
K8S node ARP 表爆满 如何优化
当 Kubernetes 节点的 ARP 表爆满时,可能会导致网络通信故障。以下是针对该问题的优化策略和解决方案: 一、ARP 表爆满的危害 网络不通:新的 ARP 请求无法被处理,导致数据包无法转发。性能下降:ARP 表查找效率降低&a…...
SpringMVC——第7章:HttpMessageConverter
一、HttpMessageConverter HttpMessageConverter是Spring MVC中非常重要的一个接口。翻译为:HTTP消息转换器。该接口下提供了很多实现类,不同的实现类有不同的转换方式。 1.什么是HTTP消息 HTTP消息其实就是HTTP协议。HTTP协议包括请求协议和响应协议。…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.4 异构数据源整合(CSV/JSON/Excel数据导入)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL异构数据源整合:CSV/JSON/Excel数据导入全攻略4.4 异构数据源整合:多格式数据导入实战4.4.1 CSV数据导入:高效批量处理4.4.1.1…...
在macOS上安装windows系统
使用Boot Camp 1. 准备工作:确认Mac满足Boot Camp系统要求,准备好Windows安装光盘或ISO映像文件,以及一个至少8GB的空白USB闪存驱动器用于保存驱动程序。 2. 打开Boot Camp助理:在“应用程序”文件夹的“实用工具”中找到“Boot…...
最长回文子串(动规 + 中心拓展)
目录 [BM73 最长回文子串](https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af?tpId295&tags&title&difficulty0&judgeStatus0&rp0&sourceUrl/exam/oj?questionJobId10&subTabNameonline_coding_page)1. 动态规划(1)状态表示:…...
学习海康VisionMaster之亮度测量
一:进一步学习了 今天学习下VisionMaster中的亮度测量:这个和前面学习的都不一样了,这个是测量ROI区域内的平均亮度等 1:什么是亮度测量? 我们工业上用的相机里面有一个感光芯片(CCD/CMOS)&…...
LeetCode 238:除自身以外数组的乘积(Java实现)
文章目录 **题目描述**解决思路1. 两次遍历法(左右乘积法)2. 核心思想 Java代码实现复杂度分析示例说明步骤分解 注意事项总结 题目描述 给定一个整数数组 nums,返回一个数组 answer,其中 answer[i] 等于 nums 中除 nums[i] 之外…...
LintCode第23题-判断数字与字母字符 第145题-大小写转换 第283题-三数之中的最大值
思路: 直接使用包装类的方法来判断 比如: isLetter(char c)判断是否是字母(包括大小写、非英语字母也行) isDigit(char c)判断是否是数字(0~9) isLetterOrDigit(char c)是否是字母或数字(等价于 isLetter isLower…...
Visual Studio 项目转Qt项目
1. 先确保qmake 和 minGW (g) 路径都在系统变量内;或者通过WinR -> cmd 来检测, 如果能够 显示qmake 的信息 , g 的信息 , 就说明设置环境变量成功。 2. 打开项目文件夹,在这里打开cmd, 换…...
判断字符是否唯一 --- 位运算
目录 一:题目 二:算法与原理 三:代码分析 一:题目 题目链接:面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode) 二:算法与原理 三:代码分析 class Solution { publ…...
react路由使用方法
react路由常用方法 一、router安装与基础路由二、路由跳转三、路由参数四、路由嵌套无论是小程序端、web端还是移动端前端开发都需要使用到路由组件,学会了路由之后便可以灵活开发各种交互页面。可以说路由在前端开发中占有非常重要的位置。在React中,路由使用方式和Vue比较相…...
Wannier90文件与参数
Wannier90源码https://github.com/wannier-developers/wannier90/releases/tag/v3.1.0 用法 Wannier90 可以以两种模式运行: 后处理模式 Post-processing mode:从文件中读取第一性原理代码计算得到的重叠和投影。我们预计这是使用 wannier90 最常见的…...
学习黑客Nmap 原理
练气期第一重 — 神识探查术(Nmap 原理) 场景设定 诸位道友(学生)刚踏入信息安全修真界,手中只有一柄“网路灵剑”(本地终端)。想要探知远处服务器的灵脉(端口)、功法&am…...
VBA信息获取与处理专题五:VBA利用CDO发送电子邮件
《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…...
Git 第一讲---基础篇 git基础概念与操作
前言: Git,作为目前全球最流行的分布式版本控制系统,以其高效、灵活和强大的分支管理能力,成为开发者手中不可或缺的工具。从个人开源项目到企业级应用,Git的身影无处不在。然而,对初学者而言,…...
心衰生物标志物NT-ProBNP和BNP
B型利钠肽(BNP)和N末端B型利钠肽原(NT-proBNP)都属于利尿钠肽(NP)家族。当发生心衰时,NT-ProBNP和BNP的浓度会升高,它们是心衰(HF)和心功能障碍诊疗中应用最广…...
Winform(11.案例讲解1)
今天写两个案例,用于更好的理解控件的使用 在写之前先写一个类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _1.案例讲解 { internal class Student { public string …...
卡尔曼滤波详解
1. 卡尔曼滤波能解决什么问题? 卡尔曼滤波用于解决含噪声的动态系统状态估计问题,例如: 通过GPS和IMU数据估计车辆位置 通过电压电流测量估计电池电量(SOC) 雷达追踪飞行器轨迹 它的核心优势是: 递归计算:只需前一…...
数据类型:String
String目录 SetGetMsetMgetIncrIncrbySubstrGetrangeSetrange String是字符串类型, redis给我们提供了String类型的value, 但是内部的实现一共有三种: int、embstr、raw; 三种的不同之处在于当value长度较小的时候使用embstr和int…...
【C/C++】inline关键词
C inline 关键字学习笔记 一、什么是 inline 函数? inline(内联)是 C 中的一个关键字,表示“将函数的代码直接插入到调用点”,以减少函数调用开销,提升执行效率。 ✅ 注意:inline 是一种“请求…...
Hive安装与配置教程
Hive安装与配置教程 1. 环境准备 1.1 系统要求 Java 8或更高版本Hadoop 2.x或更高版本MySQL或其他关系型数据库(用于存储元数据) 1.2 安装依赖 # 安装Java sudo apt update sudo apt install openjdk-8-jdk# 安装MySQL sudo apt install mysql-serv…...
C++负载均衡远程调用学习之获取主机信息功能
目录 01Lars-lbAgentV0.2-赋值均衡数据结构关系分析 02 Lars-lbAgent0.2-host_info-load_balance-route_lb数据结构的定义 03Lars-lbAgentV0.2-proto协议的定义 04 Lars-lbAgentV0.2-route_lb与UDP server的关联 05 -Lars-lbAgentV0.2-route_lb与UDP server的关联 06Lars…...