前言
f-string 自 Python 3.6 引入后,迅速成为字符串格式化的首选方式------直观、简洁、可读性远超 % 和 .format()。但很多人的用法长期停留在 f"你好,{name}" 这一层,对对齐填充、精度控制、进制转换、日期格式化这些格式说明符缺乏系统认识,每次遇到都要现查现试。
这份手册用 60 道题把 f-string 的常用能力拆成 6 个模块,由浅入深:
- 基础插值 ------ 变量、表达式、
=调试语法 - 对齐填充 ------
< ^ >、宽度、自定义填充 - 精度数值 ------
.Nf、%、千分位、科学计数 - 进制转换 ------
b o x X、#前缀、补零 - 截断日期 ------ 字符串截断、strftime 规则
- 综合实战 ------ 表格、进度条、脱敏、单位换算
怎么用这份手册 :每题先自己动手写,再对照参考答案与解析。题目的「期望输出」就是你要复现的结果,解析里标了关键陷阱 和易错点 的地方尤其值得多看一眼。文末附格式说明符速查表 和七大易错点汇总,可当工具卡收藏。
环境要求:Python 3.8+(
=调试语法需 3.8+,同种引号嵌套需 3.12+)。
一、基础插值
热身。把变量、表达式、函数调用直接塞进 {} 里,再认识调试利器 = 号。
01 已知 name = "小明"、age = 18,输出「我叫小明,今年18岁。」
输出:
我叫小明,今年18岁。
答案:
python
f"我叫{name},今年{age}岁。"
💡 解析 :花括号里的变量会被替换成它的值。这是 f-string 最基本的用法,比
%和.format()都直观。
02 已知 a = 3、b = 4,输出「3 + 4 = 7」。
输出:
ini
3 + 4 = 7
答案:
python
f"{a} + {b} = {a + b}"
💡 解析 :花括号里可以放任意表达式,
a + b会先求值为 7 再插入。不必事先把结果存进变量。
03 已知 x = 42,用 f-string 输出「x= 42」(变量名和值都显示)。
输出:
ini
x= 42
答案:
python
f"{x=}"
💡 解析 :Python 3.8+ 的调试语法。在变量后加
=,会自动输出「变量名=值」,排错时省去手写名字。默认带空格,完整写法是f"{x=}"→x= 42。
04 已知 pi = 3.14159265,用 = 调试语法输出「pi=3.14」(保留两位小数)。
输出:
ini
pi=3.14
答案:
python
f"{pi=:.2f}"
💡 解析 :
=与格式说明符可叠加:{pi=:.2f}会先输出pi=,再把值按.2f格式化为3.14。
05 已知 name="张三"、score=95.5、total=100,输出「张三的成绩是95.5/100。」
输出:
张三的成绩是95.5/100。
答案:
python
f"{name}的成绩是{score}/{total}。"
💡 解析 :多个变量可同时插入,中文标点与变量可任意穿插。注意
95.5这里是原值,没有格式化;下一模块再讲控制小数位。
06 已知 s = "ab"、n = 3,输出「ababab」。
输出:
csharp
[ababab]
答案:
python
f"[{s * n}]"
💡 解析 :花括号里是完整表达式
s * n,字符串乘法得到ababab,再被方括号包住。能放表达式就别先存中间变量。
07 已知 nums = [10, 20, 30],输出「第一个是10,最后一个是30」。
输出:
第一个是10,最后一个是30
答案:
python
f"第一个是{nums[0]},最后一个是{nums[-1]}"
💡 解析 :花括号里支持索引与切片。
nums[-1]取最后一个元素,比nums[len(nums)-1]简洁得多。
08 已知 d = {"name": "李四", "city": "北京"},输出「李四住在北京」。
输出:
李四住在北京
答案:
python
# 外层用双引号,字典 key 在内部用单引号,避免引号冲突
f"{d['name']}住在{d['city']}"
💡 解析:f-string 内部再出现引号时,内外要用不同引号(外双内单)。Python 3.12 起才允许同种引号嵌套,旧版本必须区分。
09 已知 score = 85,用三元表达式输出「及格」(≥60 为及格)。
输出:
及格
答案:
python
f"{'及格' if score >= 60 else '不及格'}"
💡 解析 :三元表达式也能放进花括号,实现「按条件输出不同文案」。注意内部的
'及格'用单引号,与外层双引号错开。
10 已知 words = "hello world",调用方法输出「HELLO WORLD」。
输出:
HELLO WORLD
答案:
python
f"{words.upper()}"
💡 解析 :花括号里可直接调用方法或函数,
words.upper()返回大写形式后插入。等价于words.upper()单独写,但拼进模板更灵活。
二、对齐与填充
格式说明符登场:< ^ > 控方向,宽度控占位,填充字符在前面。数字补零和字符串补零写法不同,这是第一个易错点。
11 已知 s = "abc",左对齐占 10 字符宽,用方括号框住看空格。
输出:
csharp
[abc ]
答案:
python
f"[{s:<10}]"
💡 解析 :
<左对齐,后接宽度10。字符串只占 3 位,右侧补 7 个空格。默认填充字符就是空格,可省略。
12 已知 s = "abc",右对齐占 10 字符宽。
输出:
css
[ abc]
答案:
python
f"[{s:>10}]"
💡 解析 :
>右对齐。数字其实默认就是右对齐(可省略>),字符串默认左对齐,所以字符串右对齐要显式写>。
13 已知 s = "abc",居中占 10 字符宽。
输出:
css
[ abc ]
答案:
python
f"[{s:^10}]"
💡 解析 :
^居中。10 位放 3 个字符,左右各补空格;奇数空格时左侧少一个(左 3 右 4),这是 Python 的约定。
14 已知 s = "abc",用 - 作填充,居中占 10 宽。
输出:
css
[---abc----]
答案:
python
f"[{s:-^10}]"
💡 解析 :填充字符写在 align 符号前面:
-^表示「用 - 填充、居中」。这是「自定义填充 + 对齐」的标准组合,顺序不能反。
15 已知 n = 42,数字左侧补零占 5 位,输出「00042」。
输出:
00042
答案:
python
f"{n:05}"
💡 解析 :对数字,宽度前的
0是「零填充」简写(等价于0>)。生成工号、序号、编号时常用。
16 已知 s = "abc"(字符串),左侧补零占 5 位,输出「00abc」。
输出:
00abc
答案:
python
# 字符串不能用 05,必须显式写 填充+对齐
f"{s:0>5}"
💡 解析 :关键陷阱 :
05的零填充简写只对数字生效。字符串补零必须写0>(用 0 填充、右对齐)。写成{s:05}会报错。
17 已知 items = [("apple", 5.5), ("banana", 3.2), ("melon", 12.8)],打印三行对齐的价目表。
输出:
apple 5.50
banana 3.20
melon 12.80
答案:
python
for name, price in items:
print(f"{name:<8}{price:>6.2f}")
💡 解析 :名称左对齐 8 位、价格右对齐 6 位保留 2 位小数,数字按列右对齐才整齐。中文陷阱 :若商品名是中文,
<8按「字符数」算,但中文显示占双宽,会对不齐------需用wcwidth或手动补显示宽度。
18 已知 n = 42,正数也显示正号,输出「+42」。
输出:
diff
+42
答案:
python
f"{n:+d}"
💡 解析 :
+让正负号都显示(正数也带 +)。d是十进制整数类型符,可省略。-是默认(只显示负号),空格" "让正数位补空格、负数补 -。
19 已知 n = -42,右对齐占 6 位,输出「 -42」。
输出:
-42
答案:
python
f"{n:>6}"
💡 解析:负号也占一位宽度。6 位放「-42」共 3 字符,左侧补 3 个空格。对齐时符号已计入宽度,无需额外处理。
20 已知 nums = [3, -7, 12],逐行右对齐占 3 位,让个位对齐。
输出:
3
-7
12
答案:
python
for x in nums:
print(f"{x:>3}")
💡 解析 :统一宽度
3+ 右对齐>,正负数个位自然对齐。也可以用{x: d}(空格占位),但>3对齐更可控。
三、精度与数值
小数位 .Nf、百分比 %、千分位 ,、科学计数 e。这些是数据展示的高频需求。
21 已知 pi = 3.141592653589793,保留 2 位小数。
输出:
3.14
答案:
python
f"{pi:.2f}"
💡 解析 :
.2f= 精度 2 + 定点数类型 f。会四舍五入到 2 位。这是最常用的浮点格式化,日常 90% 的场景。
22 已知 pi = 3.141592653589793,保留 5 位小数。
输出:
3.14159
答案:
python
f"{pi:.5f}"
💡 解析 :
.5f同理,精度改为 5。位数越多越接近原值,但注意浮点本身精度有限,别迷信过多小数位。
23 已知 ratio = 0.875,输出百分比「87.50%」。
输出:
erlang
87.50%
答案:
python
f"{ratio:.2%}"
💡 解析 :
%类型会自动乘 100 并加 %。.2控制百分比的小数位。比手写ratio*100再拼 % 干净得多。
24 已知 ratio = 0.875,输出整数百分比「88%」。
输出:
shell
88%
答案:
python
f"{ratio:.0%}"
💡 解析 :
.0%不保留小数。陷阱 :Python 格式化用「银行家舍入」(四舍六入五成双),如0.825会得到82%而非83%,对账时要留意。
25 已知 n = 1234567,加千分位分隔符。
输出:
1,234,567
答案:
python
f"{n:,}"
💡 解析 :逗号
,是千分位分组符,每三位加一个逗号。展示金额、人口、大数时必备,可读性提升明显。
26 已知 money = 1234567.891,千分位 + 2 位小数。
输出:
1,234,567.89
答案:
python
f"{money:,.2f}"
💡 解析 :
,和.2f可组合:,.2f= 千分位 + 2 位小数。顺序是[,][.precision][type],逗号在前。
27 已知 a = 123456,科学计数法保留 2 位小数。
输出:
1.23e+05
答案:
python
f"{a:.2e}"
💡 解析 :
e类型输出科学计数法(小写 e),.2控制尾数小数位。这是科学计数法格式化的常用写法。
28 已知 a = 123456,科学计数法保留 3 位小数。
输出:
1.235e+05
答案:
python
f"{a:.3e}"
💡 解析 :与上一题对比:尾数从
1.23变1.235(第三位是 5,前一位 4 进成 5)。大写 E 用:.3E→1.235E+05。
29 已知工号 num = 7,补零成 6 位编号「000007」。
输出:
000007
答案:
python
f"{num:06d}"
💡 解析 :
06d= 补零到宽 6 + 十进制整数。d对整数可省略(06也行),但写上更明确。生成单据号、流水号常用。
30 已知 x = 3.14,补零占 8 位并保留 2 位小数,输出「0003.14」。
输出:
yaml
0003.14
答案:
python
f"{x:08.2f}"
💡 解析 :
08.2f= 补零到总宽 8 + 2 位小数。「3.14」占 4 位,前补 4 个 0 凑满 8 位。宽度是包含小数点和符号的总宽度。
四、进制转换
b o x X 对应二、八、十六进制,# 加前缀,宽度与补零同样适用。底层、编码、地址场景高频。
31 已知 n = 10,输出二进制「1010」。
输出:
yaml
1010
答案:
python
f"{n:b}"
💡 解析 :
b= binary。等价于bin(n)但不带0b前缀。位运算、掩码展示时常用。
32 已知 n = 64,输出八进制「100」。
输出:
100
答案:
python
f"{n:o}"
💡 解析 :
o= octal。64的八进制是100(64 = 1×64 + 0×8 + 0×1)。文件权限位常用八进制。
33 已知 n = 255,输出小写十六进制「ff」。
输出:
ff
答案:
python
f"{n:x}"
💡 解析 :
x= 小写 hex。255=FF。颜色值、字节、编码场景最常见的小写十六进制。
34 已知 n = 255,输出大写十六进制「FF」。
输出:
FF
答案:
python
f"{n:X}"
💡 解析 :大写
X输出大写字母。颜色码#FFFFFF、MAC 地址、硬件 ID 习惯用大写,按场合选x或X。
35 已知 n = 10,输出带前缀二进制「0b1010」。
输出:
0b1010
答案:
python
f"{n:#b}"
💡 解析 :
#选项加上进制前缀(0b/0o/0x)。加了前缀的字符串能被int(s, 0)或eval反向解析回来。
36 已知 n = 255,输出带前缀小写十六进制「0xff」。
输出:
0xff
答案:
python
f"{n:#x}"
💡 解析 :
#x= 带前缀 + 小写 hex。要大写带前缀用#X→0XFF(前缀也大写)。
37 已知 n = 5,二进制补零占 8 位「00000101」。
输出:
00000101
答案:
python
f"{n:08b}"
💡 解析 :
08b= 补零到宽 8 + 二进制。展示字节、寄存器位时凑满 8/16 位,看清高位 0 是基本操作。
38 已知 n = 255,大写十六进制补零占 4 位「00FF」。
输出:
00FF
答案:
python
f"{n:04X}"
💡 解析 :
04X= 补零到宽 4 + 大写 hex。颜色码补位很实用:0→00、255→FF,凑两位才像颜色值。
39 已知 n = 10,二进制并显示正号「+1010」。
输出:
diff
+1010
答案:
python
f"{n:+b}"
💡 解析 :
+与进制类型可组合。+在类型符前,显示正负号。调试有符号数值的位表示时有用。
40 已知 n = 255,带前缀小写十六进制补零占 6 位「0x00ff」。
输出:
0x00ff
答案:
python
f"{n:#06x}"
💡 解析 :关键点 :加
#后,前缀0x也计入宽度。宽 6 =0x+ 4 位补零 =0x00ff。模拟内存地址、指针风格时常用。
五、截断与日期
.N 对字符串是「截断」而非小数位;日期则用 {dt:%格式} 直接调用 strftime 规则。本节统一用 dt = datetime(2024, 1, 1, 14, 30, 45)。
41 已知 s = "Hello World",截断为前 5 个字符。
输出:
Hello
答案:
python
f"{s:.5}"
💡 解析 :易错点 :
.N对字符串是「最大字符数截断」,不是小数位!"Hello World"取前 5 字符 →Hello。这与浮点的.2f语义不同,别混。
42 已知 s = "Python",截断为 4 字符后居中占 8 宽,输出「 Pyth 」。
输出:
css
[ Pyth ]
答案:
python
f"[{s:^8.4}]"
💡 解析 :对齐与精度可组合,格式规范顺序是
[fill][align][width][.precision][type]。先截断为Pyth,再居中宽 8。写法^8.4。
43 用 dt = datetime(2024, 1, 1, 14, 30, 45),输出「2024-01-01」。
输出:
yaml
2024-01-01
答案:
python
f"{dt:%Y-%m-%d}"
💡 解析 :f-string 中
{dt:后跟 strftime 格式}等价于dt.strftime("%Y-%m-%d"),但更简洁。%Y四位年、%m补零月、%d补零日。
44 用同一个 dt,输出时间「14:30:45」。
输出:
makefile
14:30:45
答案:
python
f"{dt:%H:%M:%S}"
💡 解析 :
%H24 小时制补零、%M分、%S秒。日志时间戳的标准格式。
45 用同一个 dt,输出中文日期「2024年01月01日」。
输出:
yaml
2024年01月01日
答案:
python
f"{dt:%Y年%m月%d日}"
💡 解析 :strftime 格式串里可夹中文字符。
%Y年%m月%d日直接产出中文日期。注意冒号后整个串都是格式,汉字会原样输出。
46 用同一个 dt,输出带微秒的时间「14:30:45.000000」。
输出:
makefile
14:30:45.000000
答案:
python
f"{dt:%H:%M:%S.%f}"
💡 解析 :
%f是 6 位微秒。这里的 dt 微秒为 0,所以补零成000000。高精度时间戳、性能计时常用。
47 用同一个 dt,输出英文星期全称「Monday」。
输出:
Monday
答案:
python
f"{dt:%A}"
💡 解析 :
%A= 星期全称(2024-01-01 是周一)。%a是缩写Mon,%w是数字星期(0=周日)。
48 用同一个 dt,12 小时制输出「02:30:45 PM」。
输出:
makefile
02:30:45 PM
答案:
python
f"{dt:%I:%M:%S %p}"
💡 解析 :
%I12 小时制补零、%p是 AM/PM。14 点 →02 PM。面向用户的本地化时间常用这套。
49 用同一个 dt,输出「2024/01/01 14:30」。
输出:
yaml
2024/01/01 14:30
答案:
python
f"{dt:%Y/%m/%d %H:%M}"
💡 解析 :日期与时间可自由拼接,分隔符
/空格:都按字面输出。%M既是分(在时间),也是月(%m)------大小写别搞错。
50 用同一个 dt,输出「01-Jan-2024」(日月年 + 月份英文缩写)。
输出:
01-Jan-2024
答案:
python
f"{dt:%d-%b-%Y}"
💡 解析 :
%b= 月份英文缩写(Jan)。报表、票据日期常这么写。%B是全称(January)。组合不同 specifier 可造出任意本地化格式。
六、综合实战
把前面学的拼起来:对齐表格、进度条、掩码、单位换算、分级判断。贴近真实业务场景。
51 已知 goods = [("苹果", 3, 5.5), ("香蕉", 2, 3.2), ("西瓜", 1, 12.8)],打印对齐的价目表(名称左对齐,数量与单价右对齐)。
输出:
苹果 数量 单价
苹果 3 5.50
香蕉 2 3.20
西瓜 1 12.80
答案:
python
for name, qty, price in goods:
print(f"{name:<4}{qty:>4}{price:>6.2f}")
💡 解析 :中文陷阱 :
<4按「字符数」算,中文「苹果」是 2 字符补 2 空格,但显示上中文占双宽,所以肉眼会错位。要让中文严格对齐,需按「显示宽度」补------用wcwidth库或手写len折算。数字部分因等宽对齐是齐的。
52 已知 percent = 0.73,打印进度条「███████░░░ 73%」(总 10 格)。
输出:
css
[███████░░░] 73%
答案:
python
filled = int(percent * 10)
f"[{'█' * filled}{'░' * (10 - filled)}] {percent:.0%}"
💡 解析 :花括号里可放任意表达式,包括字符串乘法。实心块
█乘已填充格数,空块░乘剩余。百分比用.0%。下载/处理进度条的经典写法。
53 已知字节数 size = 1536,换算并输出「1.50 KB」(1024 进制,保留 2 位)。
输出:
1.50 KB
答案:
python
def fmt_size(n):
for unit in ["B", "KB", "MB", "GB"]:
if n < 1024:
return f"{n:.2f} {unit}"
n /= 1024
return f"{n:.2f} TB"
fmt_size(1536)
💡 解析 :循环找合适单位,每次除 1024。f-string 在
return里把数值与单位拼好。文件大小、流量展示的通用函数。
**54 已知银行卡号 card = "6225880212345678",只显示前 4 和后 4 位,中间用 ******** 掩,输出「6225 ******5678」。
输出:
markdown
6225 ********5678
答案:
python
f"{card[:4]} ********{card[-4:]}"
💡 解析 :花括号里用切片
card[:4]取前 4、card[-4:]取后 4,中间用字面星号。脱敏展示账号、手机号的标准手法。
55 已知 dept="CS"、grade=2023、num=7,合成学号「CS-2023-0007」(序号补零 4 位)。
输出:
CS-2023-0007
答案:
python
f"{dept}-{grade}-{num:04d}"
💡 解析 :模板与格式说明符混用:前两段直接插值,最后一段
{num:04d}补零到 4 位。生成学号、订单号、凭证号的典型模式。
56 已知 score = 85,用嵌套三元输出等级:≥85 优秀、≥75 良好、≥60 及格、否则不及格。
输出:
优秀
答案:
python
f"{'优秀' if score >= 85 else '良好' if score >= 75 else '及格' if score >= 60 else '不及格'}"
💡 解析:三元可嵌套,实现多分支。但超过三层就难读了,生产代码里更推荐用函数 + if/elif。这里演示「f-string 内可放复杂逻辑」。
57 已知摄氏度 c = 25,输出华氏度「25°C = 77.0°F」(公式 F = C×9/5+32,保留 1 位)。
输出:
ini
25°C = 77.0°F
答案:
python
f"{c}°C = {c * 9 / 5 + 32:.1f}°F"
💡 解析 :表达式
c * 9 / 5 + 32直接放在花括号并套.1f。运算与格式化一次完成,无需中间变量。°用 Unicode 符号。
58 已知 total = 1234567.891,输出带千分位的汇总行「总计:1,234,567.89」。
输出:
makefile
总计:1,234,567.89
答案:
python
f"总计:{total:,.2f}"
💡 解析 :
,.2f= 千分位 + 2 位小数,金额展示的黄金组合。中文「总计:」前缀直接拼在模板里。报表底部的合计行常用。
59 已知 name="小明"、age=18、score=95.5,合成 CSV 一行「小明,18,95.5」。
输出:
小明,18,95.5
答案:
python
f"{name},{age},{score:.1f}"
💡 解析 :用逗号拼接各字段,
score用.1f统一为 1 位小数。导出 CSV、日志结构化字段的简洁写法,比",".join()更可控。
60 已知 title = "系统菜单",用 - 填充居中占 20 字符宽,做一条分隔标题行。
输出:
diff
--------系统菜单--------
答案:
python
f"{title:-^20}"
💡 解析 :
-^20= 用 - 填充、居中、宽 20。「系统菜单」4 字符,左右各补 8 个 -,字符数共 20。做菜单标题、分隔线、章节条都很合适。
总结与速查
六大模块一句话回顾
| 模块 | 核心能力 | 关键符 |
|---|---|---|
| 基础插值 | 变量/表达式/方法直接进 {} |
{x}、{x=} |
| 对齐填充 | 方向、宽度、填充字符 | < ^ >、fill、0 |
| 精度数值 | 小数/百分比/千分位/科学计数 | .Nf、%、,、e |
| 进制转换 | 二/八/十六进制、前缀 | b o x X、# |
| 截断日期 | 字符串截断、strftime | .N、%Y%m%d |
| 综合实战 | 业务场景组合 | --- |
格式说明符速查表
格式说明符的完整语法是:
ini
{变量:[填充][对齐][符号][#][0][宽度][.精度][类型]}
| 写法 | 含义 | 假定值 | 结果 |
|---|---|---|---|
{x} |
插入变量值 | x=42 | 42 |
{x=} |
调试:变量名=值 | x=42 | x= 42 |
{s:<10} |
左对齐宽 10 | s="abc" | abc |
{s:>10} |
右对齐宽 10 | s="abc" | abc |
{s:^10} |
居中宽 10 | s="abc" | abc |
{s:-^10} |
用 - 填充居中宽 10 |
s="abc" | ---abc---- |
{n:05} |
数字补零宽 5 | n=42 | 00042 |
{n:+d} |
强制显示正负号 | n=42 | +42 |
{pi:.2f} |
2 位小数定点数 | pi=3.14159 | 3.14 |
{r:.2%} |
百分比 2 位小数 | r=0.875 | 87.50% |
{n:,} |
千分位分隔 | n=1234567 | 1,234,567 |
{a:.2e} |
科学计数 2 位 | a=123456 | 1.23e+05 |
{n:b} |
二进制 | n=10 | 1010 |
{n:o} |
八进制 | n=64 | 100 |
{n:x} / {n:X} |
小写/大写十六进制 | n=255 | ff / FF |
{n:#x} |
带前缀十六进制 | n=255 | 0xff |
{s:.5} |
字符串截断 5 字符 | s="Hello World" | Hello |
{dt:%Y-%m-%d} |
日期格式化 | dt=datetime | 2024-01-01 |
七大易错点
- 字符串补零不能写
05------{s:05}会报错,要写{s:0>5}(题 16)。05零填充简写只对数字生效。 .N对字符串是截断、对浮点是小数位 ------{s:.5}取前 5 字符,{pi:.2f}保留 2 位小数,语义不同(题 41)。- 中文按字符数对齐会错位 ------
<8按「字符数」算,中文显示占双宽,肉眼对不齐,需按显示宽度补(题 17、51)。 - 百分比用银行家舍入 ------
0.825用:.0%得82%而非83%,对账场景留意(题 24)。 #前缀计入宽度 ------{n:#06x}宽 6 包含0x两个字符(题 40)。- 内外引号要区分 ------ f-string 内部再出现引号时,内外用不同引号(外双内单);3.12+ 才允许同种引号嵌套(题 8)。
%M是分、%m是月 ------ strftime 里大小写含义不同,别搞错(题 49)。
进阶方向
手册聚焦 f-string,字符串格式化还有三条路线可对比学习:
str.format()方法 ------ 位置/关键字参数、{0}占位,适合模板复用;%老式格式化 ------"%s %d" % (a, b),legacy 代码常见,新代码不推荐;string.Template------$name占位,最安全,适合用户可编辑模板。
掌握 f-string 的格式说明符后,三者对照学习会更通透。
这份手册若对你有帮助,点赞收藏就是最好的鼓励。错题反复回看对应模块的解析,会有新体会。 专注于原创短更,便于碎片化涉猎知识。希望我走过的路,留下的痕迹,能对你有所启发和帮助。转发请注明原处,平台投稿请私信。