Python字符串全面指南:从基础到高级操作
字符串是Python编程中最基础也是最重要的数据类型之一。本文将全面介绍Python字符串的相关知识,从基础概念到高级操作,帮助您彻底掌握字符串的使用。
1. 字符串基础
1.1 字符串的概念
字符串是由一系列字符组成的不可变序列容器,存储的是字符的编码值。在Python中,字符串具有以下特点:
-
不可变性:字符串创建后,其内容不能被修改(不能删除、增加或改变内容)
-
序列特性:字符串是由字符组成的有序序列,可以通过索引访问单个字符
-
编码支持:Python 3中的字符串默认使用Unicode编码
1.2 字符串的创建
Python中有三种方式创建字符串:
1.2.1 使用单引号创建字符串
str1 = '这是一个单引号字符串'
注意:单引号字符串中不能包含单引号(除非使用转义字符)
1.2.2 使用双引号创建字符串
str2 = "这是一个双引号字符串"
双引号字符串中可以包含单引号,反之亦然。
1.2.3 使用三引号创建字符串
str3 = '''这是一个三引号字符串,
可以跨越多行'''
str4 = """这也是一个三引号字符串,
同样可以跨越多行"""
三引号字符串主要用于多行字符串和文档字符串(docstring)。
1.3 转义字符
转义字符以反斜杠\
开头,用于表示一些特殊字符:
转义字符 | 含义 | 示例 |
---|---|---|
\\ | 反斜杠 | "C:\\Windows" |
\' | 单引号 | 'It\'s me' |
\" | 双引号 | "He said \"Hi\"" |
\n | 换行 | "Line1\nLine2" |
\t | 制表符 | "Name\tAge" |
\r | 回车 | "Hello\rWorld" |
\b | 退格 | "Hel\blo" (Hello) |
\f | 换页 | 很少使用 |
\a | 响铃 | print("\a") 会响铃 |
\ooo | 八进制表示的字符 | "\101" 表示'A' |
\xhh | 十六进制表示的字符 | "\x41" 表示'A' |
原始字符串
在字符串前加r
或R
前缀可以创建原始字符串,其中的转义字符不会被转义:
path = r'C:\newfolder\test.py'
print(path) # 输出: C:\newfolder\test.py
2. 字符串编码
2.1 编码基本概念
-
字节(byte):计算机最小存储单位,等于8位bit
-
字符:单个的数字、文字与符号
-
字符集(码表):存储字符与二进制序列的对应关系
-
编码:将字符转换为对应的二进制序列的过程
-
解码:将二进制序列转换为对应的字符的过程
2.2 常见编码方式
编码方式 | 描述 |
---|---|
ASCII | 包含英文、数字等字符,每个字符1个字节,共128个字符 |
GBK | 兼容ASCII编码,包含21003个中文;英文1个字节,汉字2个字节 |
Unicode | 国际统一编码,旧字符集每个字符2字节,新字符集4字节 |
UTF-8 | Unicode的存储与传输方式,英文1字节,中文通常3字节,是Python 3默认编码 |
2.3 编码相关函数
# 获取字符的Unicode码
print(ord('A')) # 输出: 65
print(ord('中')) # 输出: 20013# 将Unicode码转换为字符
print(chr(65)) # 输出: 'A'
print(chr(20013)) # 输出: '中'
2.4 字符串编码转换
# 字符串编码为字节
str1 = "你好,世界"
bytes1 = str1.encode('utf-8') # b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c'# 字节解码为字符串
str2 = bytes1.decode('utf-8') # "你好,世界"
3. 字符串基本操作
3.1 字符串拼接
使用+
运算符可以拼接字符串:
str1 = "Hello"
str2 = "World"
result = str1 + " " + str2 # "Hello World"
注意:字符串不能直接与其他类型拼接,需要先转换:
age = 25
# 错误写法
# print("年龄:" + age) # TypeError
# 正确写法
print("年龄:" + str(age)) # "年龄:25"
3.2 字符串重复
使用*
运算符可以重复字符串:
print("Hi" * 3) # "HiHiHi"
3.3 字符串长度
使用len()
函数获取字符串长度(字符数,不是字节数):
print(len("Python")) # 6
print(len("你好")) # 2
获取字符串的字节长度:
print(len("你好".encode('utf-8'))) # 6 (UTF-8中每个中文通常占3字节)
print(len("你好".encode('gbk'))) # 4 (GBK中每个中文占2字节)
3.4 字符串索引
可以通过索引访问字符串中的单个字符:
s = "Python"
print(s[0]) # 'P' (正向索引从0开始)
print(s[-1]) # 'n' (负向索引从-1开始,表示最后一个字符)
3.5 字符串切片
切片语法:字符串[开始索引:结束索引:步长]
s = "Hello, World!"print(s[0:5]) # "Hello" (包含开始索引,不包含结束索引)
print(s[7:]) # "World!" (从索引7到末尾)
print(s[:5]) # "Hello" (从开头到索引5)
print(s[::2]) # "Hlo ol!" (步长为2)
print(s[::-1]) # "!dlroW ,olleH" (反转字符串)
4. 字符串常用方法
4.1 查找相关方法
方法 | 描述 |
---|---|
find(sub) | 返回子字符串首次出现的索引,找不到返回-1 |
rfind(sub) | 从右侧开始查找子字符串 |
index(sub) | 类似find(),但找不到时抛出ValueError异常 |
rindex(sub) | 从右侧开始查找,找不到时抛出异常 |
startswith(prefix) | 检查字符串是否以指定前缀开头 |
endswith(suffix) | 检查字符串是否以指定后缀结尾 |
count(sub) | 返回子字符串出现的次数 |
示例:
s = "Hello, World!"print(s.find("World")) # 7
print(s.find("Python")) # -1
print(s.index("World")) # 7
# print(s.index("Python")) # ValueError
print(s.startswith("Hello")) # True
print(s.endswith("!")) # True
print(s.count("l")) # 3
4.2 大小写转换
方法 | 描述 |
---|---|
upper() | 转换为大写 |
lower() | 转换为小写 |
capitalize() | 首字母大写,其余小写 |
title() | 每个单词首字母大写 |
swapcase() | 大小写互换 |
示例:
s = "hello world"print(s.upper()) # "HELLO WORLD"
print(s.lower()) # "hello world" (原字符串已小写)
print(s.capitalize()) # "Hello world"
print(s.title()) # "Hello World"
print("Hello World".swapcase()) # "hELLO wORLD"
4.3 字符串清理
方法 | 描述 |
---|---|
strip() | 去除两侧空白字符 |
lstrip() | 去除左侧空白字符 |
rstrip() | 去除右侧空白字符 |
replace(old, new) | 替换字符串中的子串 |
示例:
s = " Hello, World! "print(s.strip()) # "Hello, World!"
print(s.lstrip()) # "Hello, World! "
print(s.rstrip()) # " Hello, World!"
print(s.replace("World", "Python")) # " Hello, Python! "
4.4 字符串分割与连接
方法 | 描述 |
---|---|
split(sep) | 按分隔符分割字符串,返回列表 |
splitlines() | 按行分割字符串 |
partition(sep) | 将字符串分成三部分(分隔符前,分隔符,分隔符后) |
join(iterable) | 用字符串连接可迭代对象中的元素 |
示例:
s = "apple,banana,orange"print(s.split(",")) # ['apple', 'banana', 'orange']
print("one\ntwo\nthree".splitlines()) # ['one', 'two', 'three']
print("hello-world".partition("-")) # ('hello', '-', 'world')
print("-".join(["2023", "08", "15"])) # "2023-08-15"
4.5 字符串判断
方法 | 描述 |
---|---|
isalnum() | 是否只包含字母和数字 |
isalpha() | 是否只包含字母 |
isdigit() | 是否只包含数字 |
isnumeric() | 是否只包含数字字符(包括汉字数字等) |
isdecimal() | 是否只包含十进制数字 |
isspace() | 是否只包含空白字符 |
islower() | 是否全部小写 |
isupper() | 是否全部大写 |
istitle() | 是否标题化(每个单词首字母大写) |
示例:
print("abc123".isalnum()) # True
print("abc".isalpha()) # True
print("123".isdigit()) # True
print("一二三".isnumeric()) # True
print(" ".isspace()) # True
print("hello".islower()) # True
print("HELLO".isupper()) # True
print("Hello World".istitle()) # True
5. 字符串格式化
5.1 %格式化(旧式格式化)
语法:"格式化字符串" % 值
常用格式化符号:
格式符 | 说明 |
---|---|
%s | 字符串 |
%d | 十进制整数 |
%f | 浮点数 |
%x | 十六进制整数 |
%o | 八进制整数 |
%e | 科学计数法(e小写) |
%E | 科学计数法(E大写) |
%% | 百分号 |
示例:
name = "Alice"
age = 25
print("Name: %s, Age: %d" % (name, age)) # "Name: Alice, Age: 25"
print("Percent: %.2f%%" % 99.567) # "Percent: 99.57%"
5.2 str.format()方法(新式格式化)
语法:"格式化字符串".format(参数)
示例:
name = "Bob"
age = 30
print("Name: {}, Age: {}".format(name, age)) # "Name: Bob, Age: 30"
print("Name: {1}, Age: {0}".format(age, name)) # 按索引
print("Name: {n}, Age: {a}".format(n=name, a=age)) # 按关键字
格式化选项:
# 对齐与填充
print("{:<10}".format("left")) # 左对齐,宽度10
print("{:>10}".format("right")) # 右对齐,宽度10
print("{:^10}".format("center")) # 居中对齐,宽度10
print("{:*^10}".format("center")) # 居中,用*填充# 数字格式化
print("{:.2f}".format(3.14159)) # 保留2位小数: "3.14"
print("{:,}".format(1000000)) # 千位分隔: "1,000,000"
print("{:b}".format(10)) # 二进制: "1010"
print("{:x}".format(255)) # 十六进制: "ff"
5.3 f-strings(Python 3.6+)
语法:f"字符串{表达式}"
示例:
name = "Charlie"
age = 35
print(f"Name: {name}, Age: {age}") # "Name: Charlie, Age: 35"# 支持表达式
a, b = 5, 10
print(f"{a} + {b} = {a + b}") # "5 + 10 = 15"# 格式化选项
pi = 3.14159
print(f"Pi: {pi:.2f}") # "Pi: 3.14"
print(f"Hex: {255:#x}") # "Hex: 0xff"
6. 字符串应用实例
案例1:判断回文串
题目:判断一个字符串正读反读是否相同(不考虑大小写和标点符号)
def is_palindrome(s):# 步骤1:将所有字母转为小写s = s.lower()# 步骤2:创建一个只包含字母的新字符串clean_str = ""for char in s:if char.isalpha(): # 只保留字母clean_str += char# 步骤3:比较字符串和它的反转return clean_str == clean_str[::-1]# 测试
print(is_palindrome("abcba")) # True
print(is_palindrome("hello")) # False
print(is_palindrome("Aba")) # True
代码解释:
-
lower()
将所有字母转为小写 -
isalpha()
检查字符是否是字母 -
[::-1]
简单的字符串反转操作
案例2:统计字母出现次数
题目:统计字符串中某个特定字母出现的次数
def count_letter(s, letter):count = 0letter = letter.lower() # 转为小写# 遍历字符串中的每个字符for char in s:# 比较字符(都转为小写)if char.lower() == letter:count += 1return count# 测试
print(count_letter("Hello", "l")) # 2
print(count_letter("Python", "p")) # 1
代码解释:
-
初始化计数器
count = 0
-
遍历字符串,对每个字符进行比较
-
使用
lower()
实现不区分大小写的比较
案例3:删除特定字符
题目:从字符串中删除所有指定的字符
def remove_char(s, char_to_remove):result = ""# 遍历原字符串for char in s:# 只保留不等于要删除的字符if char != char_to_remove:result += charreturn result# 测试
print(remove_char("banana", "a")) # "bnn"
print(remove_char("Hello!", "l")) # "Heo!"
代码解释:
-
创建空字符串
result
存储结果 -
遍历原字符串,只保留不需要删除的字符
-
使用字符串拼接
+=
构建结果
案例4:检查变量名开头
题目:检查字符串是否以字母或下划线开头
def is_valid_start(name):if not name: # 空字符串return Falsefirst_char = name[0]# 检查是否是字母或下划线return first_char.isalpha() or first_char == "_"# 测试
print(is_valid_start("name")) # True
print(is_valid_start("2name")) # False
print(is_valid_start("_var")) # True
代码解释:
-
name[0]
获取第一个字符 -
isalpha()
检查是否是字母 -
or
运算符检查是否是下划线
7. 字符串性能考虑
由于字符串的不可变性,频繁的字符串拼接操作会产生大量临时对象,影响性能。对于大量字符串拼接,推荐:
1.使用join()
方法:
# 不推荐
result = ""
for s in string_list:result += s# 推荐
result = "".join(string_list)
2.使用io.StringIO
:
from io import StringIObuffer = StringIO()
for s in string_list:buffer.write(s)
result = buffer.getvalue()
8. 总结
本文全面介绍了Python字符串的各个方面,包括:
-
字符串的基本概念和创建方式
-
字符串编码和解码
-
字符串的基本操作(拼接、重复、索引、切片等)
-
字符串常用方法(查找、替换、分割、判断等)
-
字符串格式化(%格式化、str.format、f-strings)
-
实际应用示例
-
性能优化建议
掌握这些字符串操作技巧,将大大提高您的Python编程效率和代码质量。字符串处理是编程中的基础技能,希望本文能帮助您全面理解并熟练运用Python字符串。
相关文章:
Python字符串全面指南:从基础到高级操作
字符串是Python编程中最基础也是最重要的数据类型之一。本文将全面介绍Python字符串的相关知识,从基础概念到高级操作,帮助您彻底掌握字符串的使用。 1. 字符串基础 1.1 字符串的概念 字符串是由一系列字符组成的不可变序列容器,存储的是字…...
【推荐】智慧矿山矿业信息化智能化资料汇总-共25份
智慧矿山矿业信息化智能化资料汇总 25 份: 有色金属矿山智能化采选生产线智能矿山建设与示范智能矿山建设实践与思考智慧矿山建设解决方案与实现途径以信息化、智能化为手段打造生态型、效益型国际一流示范矿山新型智能 X 荧光多通道高精度在线品位分析仪的研制与应…...
Oracle OCP认证考试考点详解083系列08
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 36. 第36题: 题目 解析及答案: 关于数据库闪回(FLASHBACK DATABASE)功能,以下…...
备战蓝桥杯国赛第一天-atcoder-beginner-contest404
B. 因为只有四种情况,旋转90/180/270度后替换,直接替换,暴力即可 C. 循环图的定义是每个点出度为2,而且只有一个环的,所以先判断出度,再判断是否成环 #include <bits/stdc.h> using namespace st…...
Python异步编程进阶:深入探索asyncio高级特性
异步上下文管理器 (async with) 异步上下文管理器允许你在异步环境中管理资源,比如数据库连接或文件操作。 基本实现 class AsyncDatabaseConnection:async def __aenter__(self):print("建立数据库连接")await asyncio.sleep(0.5) # 模拟连接建立return selfas…...
【Java ee初阶】多线程(7)
一、线程池 线程池的一些参数: corePoolSize:核心线程数量 maximumPoolSize:核心线程数量临时线程数量 上述是“java 的线程池策略”(其他语言,其他库的线程池可能不同) keepAliveTime :临时线程的存活时间.临时线程…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】6.2 预测分析基础(线性回归/逻辑回归实现)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:预测分析基础(线性回归/逻辑回归实现)6.2 预测分析基础——线性回归与逻辑回归实现6.2.1 预测分析核心理论框架1…...
【NLP】29. 高效训练与替代模型:让语言模型更轻、更快、更强
高效训练与替代模型:让语言模型更轻、更快、更强 本文介绍语言模型如何通过结构优化与新模型探索,提升训练和推理的效率,适应资源受限环境,同时概述了一些 Transformer 替代模型的最新进展。 一、如何让语言模型更高效?…...
【LaTeX+VSCode本地Win11编译教程】
LaTeXVSCode本地编译教程参考视频: LaTeXVSCode本地编译教程 下面提供一种Win11的Latex环境配置和设置方案,首先vscode安装参考博客:【VscodeGit教程】,然后准备安装Latex相关组件 在 https://miktex.org/download 下载 miktex 并…...
组合两个表 --- MySQL [Leetcode 题目详解]
目录 题目链接 往期相关基础内容讲解博客 题目详解 1. 题目内容 2. 解题思路 3. 代码编写 题目链接 // 175. 组合两个表 往期相关基础内容讲解博客 // 聚合查询和联合查询博客 题目详解 1. 题目内容 // 编写解决方案,报告 Person 表中每个人的姓、名、城市…...
STM32 PulseSensor心跳传感器驱动代码
STM32CubeMX中准备工作: 1、设置AD 通道 2、设置一个定时器中断,间隔时间2ms,我这里采用的是定时器7 3、代码优化01 PulseSensor.c文件 #include "main.h" #include "PulseSensor/PulseSensor.h"/******************…...
macOS 上是否有类似 WinRAR 的压缩软件?
对于习惯使用 Windows 的用户来说,WinRAR 是经典的压缩/解压工具,但 macOS 系统原生并不支持 RAR 格式的解压,更无法直接使用 WinRAR。不过,macOS 平台上有许多功能相似甚至更强大的替代工具,以下是一些推荐࿱…...
Java求职面试:Spring Boot与微服务的幽默探讨
Java求职者面试:技术与幽默的碰撞 场景概述 在某互联网大厂的面试现场,面试官严肃认真,程序员则是一个搞笑的水货角色。面试者名叫张伟,年龄28岁,硕士学历,拥有5年的Java开发经验。以下是面试的详细过程。…...
《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》封面颜色空间一图的选图历程
禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 学图像处理的都知道,彩色图像的颜色空间很多,而且又是三维,不同的角度有不同的视觉效果,MATLAB的图又有有box和没有box。…...
Docker 使用下 (二)
Docker 使用下 (二) 文章目录 Docker 使用下 (二)前言一、初识Docker1.1 、Docker概述1.2 、Docker的历史1.3 、Docker解决了什么问题1.4 、Docker 的优点1.5 、Docker的架构图 二、镜像三、容器四、数据卷4.1、数据卷的概念4.2 、…...
【群晖NAS】Docker + WebStation + DDNS 部署无端口号HTTPs WordPress
前言 群晖提供官方的DDNS服务,可以直接配置一个类似于xxxx.synology.me的DDNS解析IPv4/IPv6到自己的NAS;群晖还有Web Station应用可以配置Docker的端口号映射,但是他自己占用了80端口,如果给自己的应用手动指定其他端口号&#x…...
手机SIM卡打电话时识别对方按下的DTMF按键(二)
手机SIM卡打电话时识别对方按下的DTMF按键(二) --本地AI电话机器人 前言 书接上篇,在上一篇章《手机打电话时如何识别对方按下的DTMF按键的字符》中,我们从理论的角度来论述了DTMF的频率组成。并尝试使用400Kb左右的【TarsosDS…...
N-Gram 模型
N-Gram 模型 什么是N-Gram?为什么叫 N-Gram?N-Gram怎么知道下一个词可能是什么?N-Gram 能做什么?N-Gram的问题 本文回答了四个问题: 一、N-Gram是什么?二、N-Gram为什么叫N-Gram?三、N-Gram具体…...
【漫话机器学习系列】240.真正类率(True Positive Rate,TPR)
理解真正类率(True Positive Rate,TPR):公式、意义与应用 在机器学习与深度学习模型评估中,"真正类率"(True Positive Rate,简称TPR)是一个非常重要的指标。TPR反映了分类…...
ThreadLocal源码深度剖析:内存管理与哈希机制
ThreadLocal是Java并发编程中的重要工具,它为每个线程提供独立的变量存储空间,实现了线程之间的数据隔离。本文将从源码实现角度,深入分析ThreadLocal的内部机制,特别是强弱引用关系、内存泄漏问题、ThreadLocalMap的扩容机制以及…...
Softmax回归与单层感知机对比
(1) 输出形式 Softmax回归 输出是一个概率分布,通过Softmax函数将线性得分转换为概率: 其中 KK 是类别数,模型同时计算所有类别的概率。 单层感知机 输出是二分类的硬决策(如0/1或1): 无概率解释&#x…...
数字社会学家唐兴通谈数字行动主义网络行动主义与标签行动主义,理解它才算抓住AI社会学与网络社会学关键所在
让我们继续探讨一个在数字时代至关重要的概念——数字行动主义(Digital Activism)、网络行动主义(Cyberactivism)以及标签行动主义(Hashtag Activism)。我将尽力从一个数字社会学家的角度,抽丝剥…...
PandasAI:对话式数据分析新时代
PandasAI:对话式数据分析新时代 引言项目概述分析基本信息 核心功能详解1. 自然语言查询处理2. 数据可视化生成3. 多数据源集成分析4. 安全沙箱执行5. 云平台协作功能 安装和使用教程1.环境要求2.安装步骤3.基本使用方法4.切换其他LLM 应用场景和实际价值1.适用业务…...
全球化电商平台AWS云架构设计
业务需求: 支撑全球三大区域(北美/欧洲/亚洲)用户访问,延迟<100ms处理每秒50,000订单的峰值流量混合云架构整合本地ERP系统全年可用性99.99%满足GDPR和PCI DSS合规要求 以下是一个体现AWS专家能力的全球化电商平台架构设计方…...
Linux 怎么使用局域网内电脑的网络访问外部
一次性 export http_proxy"http://192.168.0.188:7890" export https_proxy"http://192.168.0.188:7890"一直生效 写入 ~/.bashrc(或 ~/.bash_profile) nano ~/.bashrc加入这一行: export http_proxy"http://19…...
Python-numpy中ndarray对象创建,数据类型,基本属性
numpy库 numpy中的数据结构ndarrayndarray中的dtypendarray中的dtype的指定方式创建ndarray及指定dtype从列表创建ndarray使用 np.empty(), np.zeros(), np.ones() 和 np.full() 创建特定值的数组使用 np.arange() 创建等差数列数组使用 np.linspace() 创建等差数组使用np.logs…...
Python从入门到高手8.2节-元组的常用操作符
目录 8.2.1 元组的常用操作符 8.2.2 []操作符: 索引访问元组 8.2.3 [:]操作符:元组的切片 8.2.4 操作符:元组的加法 8.2.5 *操作符:元组的乘法 8.2.6 元组的关系运算 8.2.7 in操作符:查找元素 8.2.8 五一她玩了个狗吃…...
Python内置函数
Python作为一门简洁强大的编程语言,提供了丰富的内置函数(Built-in Functions),这些函数无需导入任何模块即可直接使用。本文将介绍Python中最常用、最重要的内置函数,帮助初学者快速掌握这些强大的工具。 官方地址&a…...
一款基于 .NET 开源的多功能的 B 站视频下载工具
前言 哔哩哔哩(B站)是一个知名的视频学习平台,作为程序员而言这是一个非常值得推荐的网站。今天大姚给大家推荐一款基于 .NET 开源的多功能的 B 站视频下载工具:downkyi。 项目介绍 downkyi(哔哩下载姬)…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.2 数据分组与透视(CUBE/ROLLUP/GROUPING SETS)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 5.2 数据分组与透视:CUBE/ROLLUP/GROUPING SETS深度解析5.2.1 数据准备与分析目标数据集与表结构分析目标 5.2.2 ROLLUP:层级化分组汇总功能与语法示…...
20、数据可视化:魔镜报表——React 19 图表集成
一、魔镜的预言本质 "数据可视化是霍格沃茨的预言水晶球,将混沌的数据星尘转化为可解读的命运轨迹!" 魔法部占卜司官员挥舞魔杖,Echarts与Three.js的图表矩阵在空中交织成动态星图。 ——基于《国际魔法联合会》第9号可视化协议&a…...
笔记本电脑升级计划(2017———2025)
ThinkPad T470 (2017) vs ThinkBook 16 (2025) 完整性能对比报告 一、核心硬件性能对比 1. CPU性能对比(i5-7200U vs Ultra9-285H) 参数i5-7200U (2017)Ultra9-285H (2025)提升百分比核心架构2核4线程 (Skylake)16核16线程 (6P8E2LPE)700%核心数制程工…...
Flutter——数据库Drift开发详细教程(四)
目录 参考正文表达式1.比较2.布尔代数3.算术BigIn 4.空值检查6.日期和时间7.IN和NOT IN8.聚合函数(例如 count 和 sum)8.1比较8.2算术8.4计数8.5group_concat8.9窗口函数 9.数学函数和正则表达式10.子查询10.1 标量子查询10.2 isInQuery10.3 存在10.4完整…...
android-ndk开发(6): 查看反汇编
android-ndk开发(6): 查看反汇编 2025/05/05 1. 概要 android-ndk 是基于 clang 的工具链, clang 则保持了和 gcc 的高度兼容。 在 Linux 开发机上, GCC 套件里的 objdump 提供了反汇编的功能。 实际上 android-ndk 也提供了一份 objdump,…...
浅析AI大模型为何需要向量数据库?【入门基础】
文章目录 引言:大模型时代的存储挑战一、向量数据库:大模型的"海马体"1.1 什么是向量数据库?1.2 为什么大模型离不开向量数据库?(1) 嵌入(Embedding)的本质(2) 突破上下文窗口限制 二、相似性度量:欧氏距离与…...
Java面试:微服务与大数据场景下的技术挑战
面试对话场景 第一轮:基础知识考察 面试官:谢先生,您能简单介绍一下Java SE 8的新特性吗? 谢飞机:当然,Java SE 8引入了Lambda表达式、Stream API和新的日期时间API,大大简化了代码编写。 面…...
[前端]异步请求的竞态问题
竞态条件简介 遇到的问题 切换标签请求数据,但又快速切换标签请求数据,展示的是前一个标签的数据, 需要在切换标签时添加取消请求的机制,使用AbortController来取消正在进行的请求。当用户快速切换标签时,取消之前的请…...
【PDF拆分+提取内容改名】批量拆分PDF提取拆分后的每个PDF物流面单数据改名或导出表格,基于WPF的PDF物流面单批量处理方案
应用场景 物流行业每天需要处理大量包含物流面单的PDF文件,这些文件通常包含运单号、收发货人信息、货物详情等重要数据。传统手动处理方式效率低下且容易出错。本方案通过WPF实现一个自动化工具,能够: 批量拆分多页PDF为单页文件提取每页面单中的关键信息(如运单号、收件人…...
adb无线调试步骤
环境: macOS; 换成 linux 或 windows 也支持的小米15 Pro; 换成其他 android 手机也支持的 电脑和手机接入相同Wifi在电脑上,确保安装了 adb 对于 Android 开发者, 一般是是通过 Android Studio 安装对于 ndk 开发者…...
RocketMQ与Kafka的区别
文章目录 相同之处不同之处存储形式性能对比传输系统调用存储可靠性单机支持的队列数延时消息消息重复消息过滤消息失败重试死信队列 DLQ回溯消息分布式事务服务发现开发语言友好性开源社区活跃度商业支持成熟度 总结Kafka 和 RocketMQ 怎么选? 本文参考:…...
剥开 MP4 的 千层 “数字洋葱”:从外到内拆解通用媒体容器的核心
在当今数字化时代,MP4 格式随处可见,无论是在线视频、手机拍摄的短片,还是从各种渠道获取的音频视频文件,MP4 都占据着主流地位。它就像一个万能的 “数字媒体集装箱”,高效地整合和传输着各种视听内容。接下来&#x…...
设计模式(结构型)-组合模式
定义 组合模式的定义为:将对象组合成树形结构以表示 “部分 - 整体” 的层次结构,并且使得用户对单个对象和组合对象的使用具有一致性。其最关键的实现要点在于,简单对象和复合对象必须实现相同的接口,这一特性正是组合模式能够对…...
使用 IDEA + Maven 搭建传统 Spring MVC + Thymeleaf 项目的详细步骤
使用 IDEA Maven 搭建传统 Spring MVC Thymeleaf 项目 环境准备步骤 1:创建 Maven 项目步骤 2:添加依赖(pom.xml)步骤 3:配置 web.xml步骤 4:Spring 配置类(Java Config)步骤 5&am…...
「Mac畅玩AIGC与多模态19」开发篇15 - 判断节点与工具节点联动示例
一、概述 本篇在引入工具节点的基础上,进一步结合判断节点(条件分支),实现根据用户输入内容动态控制是否调用外部接口。通过构建“用户是否需要天气信息”的条件逻辑,开发人员将掌握如何在 Dify 工作流中通过条件判断…...
docker 外部能访问外网,内部不行(代理问题)
如果宿主机访问外网依赖代理(比如 http_proxy 环境变量),容器默认不会继承。需要显式传入代理: docker run -e http_proxy... -e https_proxy... ...在 docker-compose 中配置 HTTP/HTTPS 代理 version: 3 services:app:image: …...
模糊控制理论(含仿真)
本文讲解模糊控制理论、设计步骤以及案例。 1. 模糊控制原理: 模糊控制(Fuzzy Control)是一种基于模糊逻辑推理的人类经验规则实现的控制方法,适用于对系统模型不精确或难以建立精确数学模型的复杂系统。它利用“如果…那么…”&…...
《 C++ 点滴漫谈: 三十六 》lambda表达式
一、引言 在 C98 和 C03 时代,尽管 C 拥有强大的泛型编程能力和丰富的面向对象特性,但在表达局部逻辑、回调行为或一次性函数处理时,程序员却常常需要冗长的代码来定义函数对象(functor),或者使用函数指针…...
【C/C++】函数模板
🎯 C 学习笔记:函数模板(Function Template) 本文是面向 C 初学者的函数模板学习笔记,内容包括基本概念、定义与使用、实例化过程、注意事项等,附带示例代码,便于理解与复现。 📌 一…...
电赛经验分享——模块篇
1、前言 打算在这一个专栏中,分享一些本科控制题电赛期间的经验,和大家共同探讨,也希望能帮助刚刚参加电赛的同学,了解一些基本的知识。一些见解和看法可能不同或有错误,欢迎批评指正。 在本文中,主要介绍笔…...
LeetCode 热题 100 70. 爬楼梯
LeetCode 热题 100 | 70. 爬楼梯 大家好,今天我们来解决一道经典的动态规划入门题——爬楼梯。这道题在LeetCode上被标记为简单难度,要求我们计算爬到第n阶楼梯的不同方法数,每次可以爬1或2个台阶。下面我将详细讲解解题思路,并附…...