Python技术迷

字符串格式化:%和.format

字符串格式化这事儿,别看小小一个功能,其实是 Python 代码中出镜率非常高的“基础设施”。从日志输出、调试信息到前端模板渲染,哪哪儿都有它的身影。说白了,就是程序员跟字符串打交道的第一生产力工具。而这一块,Python也给了我们三种“武器”—— %、.format() 和 f-string。哪个更香?下面我就从程序员的角度,来跟你唠一唠。

先说老古董 %,它其实是 C 语言遗留下来的格式化风格,语法简单粗暴,比如:

name = "Tom"
print("Hello, %s!" % name)  # 输出:Hello, Tom!

问题来了,如果这个 name 恰好是个元组,你以为它只是个普通参数,但 % 不这么想:

name = (1, 2, 3)
print("Hi %s" % name)  # 报错:TypeError: not enough arguments for format string

因为 % 看到元组会当成多个参数来解包,而你本意是传一个整体,想避免这个坑你得这样写:

print("Hi %s" % (name,))  # 注意逗号,不然就炸

作为一个写 Python 的,我真的是被这种语法细节“坑”过不少回。它虽然快,但容易误伤,看着还挺丑,尤其多个变量嵌套格式化时,不小心就成了个“格式地狱”。

于是后来 .format() 横空出世,写法上优雅多了:

name = "Jerry"
age = 30
print("My name is {}, and I'm {} years old.".format(name, age))

你甚至可以用变量名增强可读性:

print("My name is {name}, and I'm {age} years old.".format(name="Jerry", age=30))

这种写法对比 % 来说好理解多了,不需要琢磨几个 %s 对应几个值,位置错了也不会搞出稀奇古怪的错误。

不过话说回来,.format() 写起来也不够“原汁原味”。你得老老实实写一串 .format(...) 在字符串后面,手感不太丝滑。

于是到了 Python 3.6,官方终于给了我们一个既强大又优雅的选择:f-string。

name = "小明"
age = 20
print(f"{name}的年龄是{age}岁!")  # 输出:小明的年龄是20岁!

这才是我心中的“格式化自由”——所见即所得。变量直接写在 {} 里,不用额外调 .format(),也不用担心元组解包问题。甚至还能在里面写表达式:

print(f"{name}明年就{age + 1}岁了")

再比如格式控制,f-string 也支持得很全,比如保留两位小数:

pi = 3.14159
print(f"圆周率保留两位是:{pi:.2f}")  # 输出:圆周率保留两位是:3.14

也可以对齐输出:

for i in range(1, 4):
    print(f"第{i:<5}行")  # 左对齐,占5个字符

讲真,我现在基本所有新项目都直接用 f-string。可读性高、灵活性强,尤其在写日志或调试输出时,简直像开了挂。代码逻辑和格式化写在一起,不容易搞混。唯一需要注意的,就是它只在 Python 3.6+ 才支持,如果你的项目还在维护 2.x,那还是老老实实用 .format() 吧,别想着用 f-string,不然直接报语法错误。

说回开头那个问题:“为什么不用 .format()?”

其实这就像你问一个程序员为什么还在用机械键盘,因为熟悉,甚至是情怀。但如果问我推荐哪个?很简单:Python 3.x 项目,直接上 f-string,别犹豫。

最后,如果你在面试里被问到字符串格式化的方式优劣,最佳回答应该长这样:

面试回答参考:

Python 字符串格式化常见的有三种方式:%、.format() 和 f-string。% 是最早的格式化方式,语法接近 C,但在处理多个变量时容易出错,且可读性差;.format() 提供了更好的结构和灵活性,尤其支持命名参数,适合 Python 2.6+ 项目;而 Python 3.6 之后的 f-string 则是最推荐的格式化方式,它可读性好、性能更优,并支持表达式嵌套,是目前最现代、推荐使用的格式化写法。

最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek

也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。

对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
🔥虎哥私藏精品 热门推荐🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。

资料包含了《IDEA视频教程》、《最全python面试题库》、《最全项目实战源码及视频》及《毕业设计系统源码》,总量高达650GB,全部免费领取