Python字符串格式化(一):三种经典格式化方法
文章目录
- 一、% operator:C语言风格的初代格式化方案(Python 2.0引入)
- 1. 语法核心:占位符与类型码
- 2. 进阶用法:格式修饰符
- 3. 致命缺陷:类型严格匹配的陷阱
- 4. 适用场景:旧代码维护的兼容性选择
- 二、string.format():面向对象的格式化革命(Python 2.6引入)
- 1. 语法升级:从占位符到表达式引擎
- 2. 格式说明符:精细化控制的瑞士军刀
- (1)对齐与填充
- (2)数值格式
- (3)日期时间格式化
- 3. 复杂场景的终极解决方案
- 4. 缺陷与适用边界
- 三、f-string:Pythonic的格式化终极形态(Python 3.6引入)
- 1. 语法革新:表达式内联的编程美学
- 2. 调试神器:`=`符号的魔法
- 3. 格式控制:继承并超越format()
- 4. 安全雷区:不可信数据的致命陷阱
- (1)动态SQL拼接(错误示范)
- (2)配置文件生成风险
- 5. 性能王者:速度与简洁的双重优势
- 四、三代方案深度对比与选型指南
- 选型决策树:
- 五、实战案例:不同场景的最优解
- 案例1:日志系统中的结构化输出
- 案例2:财务报表中的数值格式化
- 案例3:遗留系统的兼容性改造
- 六、总结:选择的艺术
在Python编程中,字符串格式化是一项常用的操作,它能让我们以更灵活、更美观的方式展示数据。Python提供了三种主要的字符串格式化方法,分别是% operator
、string.format()
和f-string
,它们在不同的Python版本中引入,每一代都承载着语言设计哲学的进化。本文将深入剖析三种格式化方法的技术细节、适用场景及最佳实践,帮助开发者根据需求选择最优方案。
一、% operator:C语言风格的初代格式化方案(Python 2.0引入)
1. 语法核心:占位符与类型码
%
运算符的本质是字符串插值,通过%
连接模板字符串与数据,核心在于占位符的类型匹配:
# 基础语法:%[转换标志][最小宽度][.精度]类型码
name = "Alice"
age = 30
print("用户信息:姓名-%s,年龄-%d" % (name, age)) # 输出:用户信息:姓名-Alice,年龄-30
类型码详解:
类型码 | 说明 | 示例 |
---|---|---|
%s | 字符串 | %s % “Python” → “Python” |
%d | 十进制整数 | %d % 42 → “42” |
%f | 浮点数(默认6位小数) | %.2f % 3.1415 → “3.14” |
%x | 十六进制整数(小写) | %x % 255 → “ff” |
%r | repr()输出 | %r % [“a”, “b”] → “[‘a’, ‘b’]” |
2. 进阶用法:格式修饰符
- 宽度与对齐:
%10s
(宽度10,右对齐)、%-10s
(左对齐)print("|%10s|" % "左对齐") # 输出:| 左对齐| print("|%-10s|" % "右对齐") # 输出:|右对齐 |
- 数值格式化:
# 千位分隔符(需配合类型码) print("%,.2f" % 123456.789) # 输出:123,456.79 # 科学计数法 print("%e" % 1000) # 输出:1.000000e+03
3. 致命缺陷:类型严格匹配的陷阱
- 顺序错误引发的灾难:
# 变量顺序与占位符不匹配时 print("%d岁的%s" % ("Alice", 30)) # 抛出TypeError: %d format: a number is required, not str
- 字典参数的局限性:
但无法处理嵌套字典或复杂表达式,格式控制能力停留在C语言时代。# 需显式使用%()字典解包 user = {"name": "Bob", "age": 25} print("%(name)s is %(age)d years old." % user) # 输出:Bob is 25 years old.
4. 适用场景:旧代码维护的兼容性选择
- 遗留系统适配:在Python 2.x代码迁移中,
%
运算符仍是理解历史逻辑的钥匙 - 简单场景快速编写:临时脚本中快速生成日志文本,如
print("错误码:%d" % error_code)
二、string.format():面向对象的格式化革命(Python 2.6引入)
1. 语法升级:从占位符到表达式引擎
format()
方法通过{}
占位符实现动态替换,支持位置参数、关键字参数、索引访问三重模式:
# 位置参数(按顺序填充)
print("{}的年龄是{}".format("Charlie", 35)) # 输出:Charlie的年龄是35 # 关键字参数(显式绑定)
print("{name}的年龄是{age}".format(name="David", age=40)) # 输出:David的年龄是40 # 索引访问(适用于列表/元组)
data = ("Eve", 38, "Engineer")
print("姓名:{0},年龄:{1},职业:{2}".format(*data)) # 输出:姓名:Eve,年龄:38,职业:Engineer
2. 格式说明符:精细化控制的瑞士军刀
{字段名:格式说明符}
语法支持数十种格式选项,核心功能包括:
(1)对齐与填充
# 居中对齐,宽度10,填充*
print("{:*^10}".format("Python")) # 输出:***Python*** # 数字前补零(宽度5)
print("{:05d}".format(123)) # 输出:00123
(2)数值格式
符号 | 说明 | 示例 |
---|---|---|
, | 千位分隔符 | "{:,d}" .format(1234567) → “1,234,567” |
+ | 显示正负号 | "{:+d}" .format(-10) → “-10” |
_ | 下划线分隔(Python 3.11+) | "{:_d}" .format(1000000) → “1_000_000” |
b/o/x/X | 二进制/八进制/十六进制 | "{:x}" .format(255) → “ff” |
(3)日期时间格式化
from datetime import datetime
date = datetime(2024, 1, 1)
print("{:%Y-%m-%d %H:%M:%S}".format(date)) # 输出:2024-01-01 00:00:00
3. 复杂场景的终极解决方案
- 嵌套字典格式化:
user = {"profile": {"name": "Frank", "age": 45}} print("姓名:{profile[name]},年龄:{profile[age]}".format(**user)) # 输出:姓名:Frank,年龄:45
- 自定义对象支持:
class Person: def __init__(self, name, age): self.name = name self.age = age def __format__(self, format_spec): return f"姓名:{self.name},年龄:{self.age}" print("{0}".format(Person("Grace", 50))) # 输出:姓名:Grace,年龄:50
4. 缺陷与适用边界
- 语法冗长:复杂格式需重复书写字段名,如
"{:.2f} {:.2f}"
.format(x, y)` - 性能损耗:相较f-string,每次调用
format()
需解析模板字符串,存在约10%-20%的性能开销 - 表达式限制:无法直接嵌入条件判断或函数调用,需预先计算表达式值
三、f-string:Pythonic的格式化终极形态(Python 3.6引入)
1. 语法革新:表达式内联的编程美学
f-string(格式化字符串字面值)通过f""
前缀激活,允许在{}
中直接嵌入任意Python表达式,实现代码即模板的极简主义:
# 直接调用函数
def get_current_time(): return datetime.now().strftime("%H:%M:%S")
print(f"当前时间:{get_current_time()}") # 输出:当前时间:14:30:45 # 复杂表达式(条件判断+数学运算)
score = 85
print(f"成绩等级:{'A' if score >= 90 else 'B' if score >= 80 else 'C'}") # 输出:成绩等级:B
2. 调试神器:=
符号的魔法
Python 3.8引入的=
修饰符可自动打印表达式及其值,成为调试利器:
x = 10
y = 20
print(f"{x=}, {y=}, {x + y=}")
# 输出:x=10, y=20, x + y=30
该特性在日志定位、算法调试中大幅提升问题排查效率。
3. 格式控制:继承并超越format()
f-string完全兼容format()
的格式说明符,同时支持更简洁的语法:
# 千位分隔符(数值格式化)
amount = 1234567.89
print(f"{amount:,}") # 输出:1,234,567.89 # 字符串截断(超过10个字符显示...)
long_text = "Python is a powerful programming language"
print(f"{long_text:.10}...") # 输出:Python is a...
4. 安全雷区:不可信数据的致命陷阱
f-string的表达式执行机制在处理外部输入时可能引发代码注入攻击,典型场景包括:
(1)动态SQL拼接(错误示范)
# 恶意用户输入:"'; DROP TABLE users;--"
username = input("请输入用户名:")
# 直接拼接导致SQL注入
query = f"SELECT * FROM users WHERE name = '{username}'"
(2)配置文件生成风险
# 恶意输入包含文件操作指令
filename = input("请输入文件名:")
# 危险!直接执行用户提供的表达式
content = f"文件内容:{open(filename).read()}"
安全最佳实践:
- 永远对外部输入进行严格校验(类型检查、长度限制、正则匹配)
- 使用参数化查询(如SQLAlchemy的
text()
方法)替代字符串拼接 - 对不可信字符串进行转义处理(如
html.escape()
)
5. 性能王者:速度与简洁的双重优势
基准测试显示,f-string比%
运算符快30%,比format()
方法快40%(数据来源:Python官方基准测试)。这得益于其在编译阶段解析模板,运行时直接执行表达式的特性,尤其适合高频调用的格式化场景(如日志系统、API响应生成)。
四、三代方案深度对比与选型指南
特性 | % operator | string.format() | f-string |
---|---|---|---|
语法风格 | C语言插值 | 面向对象方法 | Pythonic表达式 |
表达式支持 | 仅变量 | 简单表达式 | 任意Python表达式 |
格式灵活性 | 基础类型 | 高级格式控制 | 完全兼容format()语法 |
性能(相对) | 1.0x | 0.8x | 1.3x |
安全风险 | 中(类型不匹配) | 低(参数隔离) | 高(表达式执行) |
代码可读性 | 中等(依赖类型码) | 高(显式参数) | 极高(表达式内联) |
选型决策树:
- 兼容性优先:维护Python 2.x旧代码 →
% operator
- 格式复杂度高:需要动态指定字段名、处理嵌套数据结构 →
string.format()
- 现代项目首选:数据来源可信、追求代码简洁与性能 → f-string
- 安全敏感场景:处理用户输入、构建SQL/HTML → 避免直接使用f-string,改用参数化方案
五、实战案例:不同场景的最优解
案例1:日志系统中的结构化输出
需求:记录用户操作,包含时间戳、用户名、操作类型,需同时满足人类可读与机器解析。
- f-string方案(快速开发):
print(f"[{datetime.now()}] 用户{username}执行{action}操作")
- format()方案(格式统一):
print("[{0}] 用户{1}执行{2}操作".format(datetime.now(), username, action))
案例2:财务报表中的数值格式化
需求:显示金额(千位分隔、2位小数),正负值显示不同颜色(假设控制台支持ANSI颜色)。
# f-string实现(表达式内联颜色控制)
amount = -1500.5
color = "\033[31m" if amount < 0 else "\033[32m"
reset = "\033[0m"
print(f"{color}{amount:,.2f}{reset}") # 输出:红色-1,500.50或绿色1,500.50
案例3:遗留系统的兼容性改造
场景:将Python 2代码升级至3.x,需逐步替换%
运算符。
# 旧代码(%风格)
print("连接数据库:host=%s, port=%d" % (host, port)) # 过渡方案(format()风格)
print("连接数据库:host={0}, port={1}".format(host, port)) # 最终方案(f-string风格,Python 3.6+)
print(f"连接数据库:host={host}, port={port}")
六、总结:选择的艺术
从C语言风格的%
运算符到Python原生的f-string,字符串格式化的进化史折射出编程语言从“面向过程”到“面向表达”的设计哲学转变。现代Python开发中,f-string凭借其无可比拟的简洁性和性能优势,成为大多数场景的首选,但需始终警惕表达式执行带来的安全风险。string.format()
则在需要高度格式控制或兼容性的场景中发挥着不可替代的作用,而%
运算符仅建议用于旧代码维护。
理解三种方案的技术边界与适用场景,是写出高效、安全、易维护代码的关键。随着Python 3.14即将引入的t-string(模板字符串),字符串处理将迎来新的变革——它在f-string的基础上增加了模板对象的静态分析能力,为SQL注入防范、DSL构建等复杂场景提供了更安全的解决方案。这也印证了Python生态的持续进化:每一代工具的出现,并非颠覆过去,而是为开发者提供更精准的“瑞士军刀”。
在实际编码中,不妨遵循以下原则:
- 新项目优先使用f-string,享受代码简洁与性能优势
- 处理不可信数据时,搭配参数化查询或转义函数
- 遇到复杂格式控制(如动态字段名、嵌套结构),回归
string.format()
的显式参数风格 - 旧代码迁移时,分阶段从
%
过渡到format()
,最终升级至f-string
掌握这些技巧,即可在字符串格式化的世界中自由驰骋,让数据以最优雅的方式呈现在代码与用户面前。
下期预告
本文聚焦于三种格式化方法的横向对比,而 f-string 自 Python 3.6 诞生以来,在多个版本中持续进化 —— 从 3.7 对异步表达式的支持,到 3.8 引入的自记录调试语法=, 再到 3.12 对注释、引号复用等细节的优化,其功能边界不断拓展。下篇文章将深入梳理 f-string 在各版本中的关键进化历程,结合具体特性解析其设计逻辑与实战价值,敬请期待!
相关文章:
Python字符串格式化(一):三种经典格式化方法
文章目录 一、% operator:C语言风格的初代格式化方案(Python 2.0引入)1. 语法核心:占位符与类型码2. 进阶用法:格式修饰符3. 致命缺陷:类型严格匹配的陷阱4. 适用场景:旧代码维护的兼容性选择 二…...
浅谈无服务器WebSocket的优势
实际上,一个实用的解决方案是将构建业务关键型实时平台的复杂性卸载到专门的云服务中。 完全托管的无服务器 WebSocket 解决方案为事件驱动的消息传递提供了基础结构;它使底层基础设施成为一种商品。客户端使用提供程序服务发送/接收低延迟消息,并专注于…...
10.7 LangChain v0.3架构大升级:模块化设计+多阶段混合检索,开发效率飙升3倍!
LangChain v0.3 技术生态与未来发展 关键词:LangChain Chains, Agents 架构, Retrieval Strategy, LangGraph, 模块化设计 3. LangChain 项目:Chains, Agents, Retrieval Strategy LangChain v0.3 通过 Chains-Agents-Retrieval 三位一体的技术栈,构建起完整的大模型应用开…...
GLPK(GNU线性规划工具包)中建模语言MathProg的使用
GNU MathProg是一种用于描述线性数学规划模型的建模语言。用GNU MathProg语言编写的模型描述由一组语句和数据块组成。 在MathProg中,模型以集合、参数、变量、约束和目标(sets, parameters, variables, constraints, objectives称为模型对象)的形式进行描述。 在Ma…...
系统思考:IT企业项目困境分析
最近遇到一家快速发展的IT技术公司,遭遇了项目进度滞后、团队沟通不畅和资源分配不合理等一系列挑战。虽然他们拥有一支技术强大的团队,但在项目管理和团队协作上却显得力不从心。结果,多个项目超预算、交期延迟,客户满意度直线下…...
计算机网络 - 2.基础协议
1.TCP协议 1.TCP(Transmission Control Protocol):传输控制协议2.TCP协议是一种面向连接的、可靠的、 基于字节流的传输层通信协议 1.面向连接:两个使用TCP协议的应用(通常一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接2.可靠的 1.数据传输之前都要建立…...
go语法大赏
前些日子单机房稳定性下降,找了好一会才找到真正的原因。这里面涉及到不少go语法细节,正好大家一起看一下。 一、仿真代码 这是仿真之后的代码 package mainimport ("fmt""go.uber.org/atomic""time" )type StopSignal…...
运行vscode编辑器源码
距离上次二次开发vscode已经是三年前的事了,当时是1.60.0版本,目前vscode已升级到了1.99.2版本,里面改动很大,最近下载下来了新版源码跑起来看看 准备node、python 源码里面node版本做了限制 2025-01-27 09:53:00.450 [info] Fo…...
ShenNiusModularity项目源码学习(26:ShenNius.Admin.Mvc项目分析-11)
本文学习并分析ShenNiusModularity项目中商城系统模块的小程序用户页面、用户收货地址页面。 1、小程序用户页面 小程序用户页面用于检索、浏览使用商城系统的用户数据(保存在shop_appuser表内,系统用户保存在sys_user表内),该页…...
C#中的成员常量:编译时的静态魔法
在C#编程中,常量(const)是一个强大而特殊的语言特性,特别是当它们作为类的成员时。本文将深入探讨成员常量的特性、使用场景以及与静态量的区别。 成员常量的基本特性 成员常量是声明在类内部的常量,具有以下核心特点: 声明位置…...
C# 深入理解类(成员常量)
成员常量 成员常量类似前一章所述的局部常量,只是它们被声明在类声明中而不是方法内,如下面的 示例: 与局部常量类似,用于初始化成员肯量的值在编译时必须是可计算的,而且通常是一个预定 义简单类型或由它们组成的表达…...
服务端HttpServletRequest、HttpServletResponse、HttpSession
一、概述 在JavaWeb 开发中,获取客户端传递的参数至关重要。http请求是客户端向服务端发起数据传输协议,主要包含包含请求行、请求头、空行和请求体四个部分,在这四部分中分别携带客户端传递到服务端的数据。常见的http请求方式有get、post、…...
有哪些GIF图片转换的开源工具
以下是关于GIF图片转换的开源工具的详细总结,涵盖功能特点、适用场景及用户评价: 1. FFmpeg 功能特点: 作为开源命令行工具,FFmpeg支持视频转GIF、调整帧率、分辨率、截取片段等操作,可通过脚本批量处理。适用场景: 适合开发者或技术用户进行高效批处理,常用于服务器端自…...
Vue.js教学第五章:计算属性与侦听器详解
Vue.js 之计算属性与侦听器详解 一、计算属性 (一)概念 计算属性(Computed Properties)是 Vue.js 中的一个核心概念。它允许我们基于一个或多个数据属性来定义一个新的属性,该属性的值会根据其依赖的数据属性的变化而自动更新。这就好像是一个 “智能” 属性,它的值不是…...
第三章:UI 系统架构拆解与动态界面管理实录
还记得我们第二章刚跑通主场景,那时候是不是觉得“终于见到界面了”?但请等等,你看到的只是冰山一角,下面藏着的是 UIManager 的地狱之门。 本章我们将深入探讨: UI 界面如何加载(Prefab 动态加载机制&…...
第四章:WebSocket 通信机制全解与客户端发包实录
如果你以为一个游戏启动后只靠本地逻辑运转,那你真是低估了网络通信的存在感。在互动组件项目里,WebSocket 才是真正的灵魂通道——UI 再好看,没包发出去也等于白搭。 本章我们深入讲解 WebSocket 在安卓前端项目中的应用,从封装结…...
pnpm项目内网迁移
pnpm项目内网迁移 文章目录 pnpm项目内网迁移0.前言1.基础环境安装2.构建pnpm离线安装包3.使用pnpm重新安装项目依赖4.项目迁移参考链接: 0.前言 要将一个依赖pnpm的项目迁移到内网离线环境下进行开发。 1.基础环境安装 要保证NodeJS版本一致,否则执行…...
C++23 放宽范围适配器以允许仅移动类型(P2494R2)
文章目录 引言背景与动机提案内容与实现细节提案 P2494R2实现细节编译器支持 对开发者的影响提高灵活性简化代码向后兼容性 示例代码总结 引言 C23 标准中引入了许多重要的改进,其中一项值得关注的特性是放宽范围适配器(range adaptors)以允…...
[ctfshow web入门] web119
信息收集 import requestsurl "http://51a7e437-2e66-4742-bbfe-e4cce44e360b.challenge.ctf.show/" for i in range(255):data {"code": f"{chr(i)}"}response requests.post(url, datadata)# print(len(response.text))# print(response.t…...
vector--OJ3
链接: [link](链接: link) class Solution { public: vector<string> str{ "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };void CB(string& …...
第6章 实战案例:基于 STEVAL-IDB011V1 板级 CI/CD 全流程
在前五章中,我们完成了嵌入式 CI/CD 从环境搭建、编译自动化、测试自动化、发布分发到监控回归的全技术链条。本章将以 STEVAL-IDB011V1(搭载 BlueNRG-355)评估板为实战载体,手把手演示如何在 GitLab CI(或 Jenkins)上,构建一条从 Git Push → 编译 → 测试 → 刷写 → …...
逆变器的输出外特性分析
VSG 并网状态下,考虑到弱电网下线路阻抗不能忽略,VSG 的功率传输模型可以表示为 VSG 的输出电压经过线路阻抗后串联至电网(考虑滤波电感,且忽略滤波电容作用)。设 U 为 VSG 输出电压的幅值,Ug为电网电压的幅…...
如何给PSCAD添加库文件
1、点击Options 2、选择蓝色的选项 3、查看Intel(R) Visual Fortran Compiler XE 的版本 4、打开原文件的Library 5、打开 6、点击这个文件的右键 7、然后选择第一项project setting 9、先把第8步中link里面原有的路径删除,再点browes[A1] ,然后选择 [A…...
基于simulink搭建的模块化多电平MMC仿真模型
1. 模块化多电平换流器的运行原理 1.1模块化多电平换流器的拓扑结构 MMC共由6个桥臂构成。其中每个桥臂由若干个串联且结构相同的子模块(Sub-Module, SM)与一个电抗器L串联…...
基于simulink的LCC-HVDC输电模型
1.本模型基于simulink搭建常规直流输电模型,运行稳定。 有需要交流或者模型的可在CSDN上留言...
PWM整流器双闭环PI参数的整定
1. 整流侧电路拓扑图 整流电路由交流侧电源、线路电阻、线路电抗、整流器、滤波电容以及负载组成。整体电路图如图1所示。 图 1 整流电路拓扑图 其中,IGBT的开关状函数如下式所示 根据图 1 列出 KVL 公式如下,电流的正方向是从左到右 对于每一相的IGBT相…...
柔性直流输电系统介绍及simulink模型的搭建
1. 柔性直流输电的运行原理 柔性直流输电系统由电压源型换流器与直流输电线路构成, 图 1‑1所示为单端电压源型换流器原理图。柔性直流输电系统的功率可以双向流动,即换流器既可以作为整流站将从交流系统接收的功率通过直流线路输送出去,也可以作为逆变站将通过直流…...
matlab求矩阵的逆、行列式、秩、转置
inv - 计算矩阵的逆 用途:计算一个可逆矩阵的逆矩阵。 D [1, 2; 3, 4]; % 定义一个2x2矩阵 D_inv inv(D); % 计算矩阵D的逆 disp(D_inv);det - 计算矩阵的行列式 用途:计算方阵的行列式。 E [1, 2; 3, 4]; determinant det(E); % 计算行列式 disp…...
如何在纷杂的环境当中保持保持独立思考能力?
引言 当你在人群当中时,你是否经常容易受到身边人的干扰,而丢失自己原有的想法,其实在环境纷杂当中,我们很容易产生“从众效应”而丢失了自己对这件事独立思考的能力。拥有不受外界影响,独立思考的能力可以让我们更加…...
Linux:计算机的层状结构
1.冯诺依曼体系结构 我们常见的计算机,如笔记本、台式机。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系结构。 CPU:运算器和控制器组成。运算器主要工作是做算术运算和逻辑运算。控制器主要工作是协调设备之间信息流动的…...
注册表设置windows背景护眼色
方法一: CtrlR,输入regedit打开注册表 HKEY_CURRENT_USER\Control Panel\Colors 右侧窗口Windows键值由255 255 255改为202 234 206。 方法二: 还是注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\DefaultColo…...
《算法导论(第4版)》阅读笔记:p82-p82
《算法导论(第4版)》学习第 17 天,p82-p82 总结,总计 1 页。 一、技术总结 1. Matrix Matrices(矩阵) (1)教材 因为第 4 章涉及到矩阵,矩阵属于线性代数(linear algebra)范畴,如果不熟悉,可以看一下作者推荐的两本…...
政府数据开放试点企业如何抢占特许经营协议黄金席位
首席数据官高鹏律师团队 《中共中央办公厅 国务院办公厅关于 加快公共数据资源开发利用的意见》的落地,标志着数据从“封闭管理的行政资源”正式转变为“可流通的市场要素”。但机遇与风险从来是一枚硬币的两面——特许经营协议的黄金席位背后,隐藏着…...
Spring之Bean的初始化 Bean的生命周期 全站式解析
目录 导图 步骤 第一步 实例化 第二步 属性赋值 第三步 初始化 aware 接口 BeanPostProcessor 接口 InitializingBean 和 init-method 第四步使用 第五步使用后销毁 描述一下 Bean 的 生命周期 导图 步骤 总体上可以分为五步 首先是 Bean 的实例化Bean 在进行实例…...
exit耗时高
背景:程序退出发现被强制退出,而不是正常的退出。正常退出是发送15信号,而异常退出是发送信号9,强制退出。退出机制是先发送信号15,然后6s内没有退出完成,会发送信号9。通过查看退出流程,是将初…...
密文搜索-map容器+substr
https://www.luogu.com.cn/problem/P8630 ///因为密码是打乱顺序的,所以只要字母个数对上就行 ///用map存字母种类和个数 ///vector存每行密码 ///不用set,每行独立 再考察一个字符串分割函数substr,map自动比较 #include<bits/stdc.h…...
从专家编码到神经网络学习:DTM 的符号操作新范式
1st author: Paul Soulos paper: Differentiable Tree Operations Promote Compositional Generalization ICML 2023 code: psoulos/dtm: Differentiable Tree Machine 1. 问题与思路 现代深度学习在连续向量空间中取得了巨大成功,然而在处理具有显式结构&#x…...
江协科技GPIO输入输出hal库实现
首先先介绍一下GPIO在hal库里面的函数 GPIOhal库函数介绍 GPIO在hal库里面有两个文件,一个hal_gpio.h一个hal_gpio_ex.h 第一个文件主要存放的就是hal库里面对gpio的相关函数以及GPIO配置的结构体,还有hal库与标准库的一大区别回调函数。以及一些对gp…...
软件设计师教程—— 第二章 程序设计语言基础知识(上)
前言 在竞争激烈的就业市场中,证书是大学生求职的重要加分项。中级软件设计师证书专业性强、认可度高,是计算机相关专业学生考证的热门选择,既能检验专业知识,又有助于职业发展。本教程将聚焦核心重点,以点带面构建知…...
Java 快速转 C# 教程
以下是一个针对 Java 开发者快速转向 C# 的简明教程,重点对比 Java 与 C# 的异同,帮助你快速上手。 项目结构: .sln :解决方案文件,管理多个项目之间的依赖关系。.csproj :项目文件,定义目标框…...
Linux面试题集合(5)
把文件1的内容追加到文件2 cat 文件1>>文件2 把文件1和文件2合并成文件3 cat 文件1 文件2>文件3 使用less查看文件时,搜寻ab字符 /ab 用more和less如何查看文件 more: CtrlF -- 向下滚动一屏 CtrlB -- 返回上一屏 f -- 向下翻屏 b -- 向上翻屏 …...
OpenCV 光流估计:从原理到实战
在计算机视觉领域,光流估计(Optical Flow Estimation)是一项至关重要的技术,它能够通过分析视频序列中图像像素的运动信息,捕捉物体和相机的运动情况。OpenCV 作为强大的计算机视觉库,为我们提供了高效实现…...
星火杯大模型应用创新赛学习笔记——datawhale
背景——赛事任务 聚焦大学生真实应用场景,围绕阅读、写作、搜索、聊天、问答等方向,聚焦口语学习、面试招聘、论文写作、学习笔记等一个或多个细分应用场景,完成具有创新性、实用性的应用方案,呈现可演示、可落地、具备商业价值…...
Ulyssess Ring Attention
https://zhuanlan.zhihu.com/p/689067888https://zhuanlan.zhihu.com/p/689067888DeepSpeed Ulysess:切分Q、K、V序列维度,核心卖点保持通信复杂度低,和GPU数无关,和序列长度呈线性关系。 Ring-Attention:切分Q、K、V序…...
c++重要知识点汇总(不定期更新)
前言 真心希望各位dalao点赞收藏~ 树状数组 作用:高效求出区间前缀和,允许进行修改操作。 举个栗子: 刚开始有8项,分别为1-8。 首先构建二叉树: 1-8/ |/ |/ |/ |/ |1-4 5-8/ | / |/ | / |1-…...
重排序模型解读 mxbai-rerank-base-v2 强大的重排序模型
mxbai-rerank-base-v2 强大的重排序模型 模型介绍benchmark综合评价安装 模型介绍 mxbai-rerank-base-v2 是 Mixedbread 提供的一个强大的重排序模型,旨在提高搜索相关性。该模型支持多语言,特别是在英语和中文方面表现出色。它还支持代码和 SQL 排序&a…...
电子电路:到底该怎么理解电容器的“通交流阻直流”?
电容器“通交流,阻直流”的特性源于其对不同频率电信号的响应差异,具体可通过以下步骤理解: 一、电容器的基本结构与充放电机制 结构:由两个导体极板(如金属)和中间的绝缘介质组成。充放电过程:…...
售前工作.工作流程和工具
第一部分 售前解决方案及技术建议书的制作 售前解决方案编写的标准操作步骤SOP: 售前解决方案写作方法_哔哩哔哩_bilibili 第二部分 投标过程关键活动--商务标技术方案 1. 按项目管理--售前销售项目立项 销售活动和销售线索的跟踪流程和工具 1)拿到标书ÿ…...
ORACLE数据库实例报错ORA-00470: LGWR process terminated with error宕机问题分析报告
服务概述 10月21号03:22分,BOSS数据库实例发生异常宕机;工程师及时响应此问题并对此故障原因进行分析及相关建议,详细的故障情况及相关日志、TRACE文件的分析及总结、建议,请参阅本文档。 hzboss数据库实例宕机分析 4.1 数据库层面日志的分…...
深度学习---知识蒸馏(Knowledge Distillation, KD)
一、知识蒸馏的本质与起源 定义: 知识蒸馏是一种模型压缩与迁移技术,通过将复杂高性能的教师模型(Teacher Model)所学的“知识”迁移到轻量级的学生模型(Student Model),使学生模型在参数量和计…...