Python技术迷

python3 用 format() 好还是 % 表达式好?

嗨,大家好,我是虎哥。

作为一名程序员,尤其是长期使用 Python 的开发者,我相信大家对字符串格式化再熟悉不过了。

从最早的百分号 % 格式化,到后来更优雅的 format(),再到现在火爆的 f-string,Python 的字符串格式化功能经历了不少演变。

今天咱们就来聊聊,Python3 中到底是用 format() 好,还是 % 表达式更好,或者说,f-string 是否已经无可争议地取代了这两者?

百分号表达式:传统经典,但略显过时

首先,我们先从 % 这种经典的格式化方式说起。% 是 Python 最早期的字符串格式化方式,它的工作原理类似于 C 语言的 printf。

我们通过占位符来表示字符串中的变量,并且需要明确指出变量的类型,例如 %d 表示整型,%s 表示字符串。

举个例子:

name = "Alice"age = 30print("My name is %s and I am %d years old." % (name, age))

这段代码能输出:My name is Alice and I am 30 years old.

看起来还算简单吧?但问题也随之而来:它对于复杂的字符串处理并不友好。如果你有多个变量要插入字符串,并且每个变量类型不同,那么代码就显得有点繁琐了。

你不仅要记得每个占位符,还要确保类型匹配。一旦不匹配,比如用 %d 插入字符串,你就会得到一个类型错误:

print("%d" % "hello world!") # 报错:TypeError: %d format: a real number is required, not str

对于今天的 Python 开发者来说,% 更像是“清朝老兵”——虽有历史意义,但在现代编程场景中已经不太常见了。

format():进步不少,但略显啰嗦

为了解决 % 格式化的局限性,Python 在 2.7 和 3.x 版本中引入了 format() 方法,这个方法显著提升了字符串格式化的灵活性。与 % 不同,format() 可以不用指定数据的类型,直接用大括号 {} 作为占位符,它会自动匹配类型并插入对应的变量。

例如:

name = "Alice"age = 30print("My name is {} and I am {} years old.".format(name, age))

这里,{} 代替了 %s 和 %d,不用再记那些烦人的类型格式符了。你也可以指定变量的顺序,甚至可以用关键词参数:

print("My name is {name} and I am {age} years old.".format(name="Bob", age=25))


format() 确实解决了 % 的很多问题,代码更清晰,错误更少。然而,format() 虽然强大,却不够简洁。每次格式化都要写 format() 关键字,加上括号,显得有些累赘。尤其是当你需要频繁格式化多个变量时,代码可能会显得冗长。

f-string:现代开发者的首选

然后,到了 Python 3.6,终于来了一个终极武器——f-string。相比 % 和 format(),f-string 绝对是个革命性的改进。

它通过在字符串前加上 f,直接把变量嵌入到字符串内部,简洁、直观、速度快,是现代 Python 开发者的最爱。

例如同样的例子:

name = "Alice"age = 30print(f"My name is {name} and I am {age} years old.")

与 format() 相比,f-string 省去了 format() 函数调用,变量和表达式直接放在 {} 中,Python 会自动求值并插入结果。你甚至可以在 f-string 中嵌入简单的表达式,比如:

a = 5b = 10print(f"Five plus ten is {a + b}.")

结果是:Five plus ten is 15.

此外,f-string 还支持格式化数字和日期等。例如,我们可以用 f-string 格式化小数:

import mathpi = math.piprint(f"Pi rounded to three decimal places is {pi:.3f}.")

输出是:Pi rounded to three decimal places is 3.142.

这让 f-string 不仅简洁,而且功能非常强大。它的速度也比 format() 快,因为 f-string 是 Python 语言内部实现的一部分,而 format() 则是函数调用。

那么,哪个最好?

现在我们回到问题本身:在 Python 3 中,用 format() 好还是 % 表达式好?答案其实很明显了——f-string 是最好的选择。

从代码简洁性、可读性以及性能等角度来看,f-string 都是优胜者。它让代码变得更加直观,避免了 % 格式化中需要手动管理变量类型的繁琐,也比 format() 方法少了函数调用的累赘。它几乎适用于所有需要字符串格式化的场景。

如果你现在还在用 %,那么是时候“退休”这种老旧的方式了。毕竟,清朝的马车再经典,也比不上现代的汽车。format() 虽然是个不错的进步,但在有了 f-string 之后,它看起来就显得有些多余了。

当然,如果你还在维护一些遗留的 Python 2 项目,可能仍然不得不用 % 和 format()。

但在新项目,尤其是 Python 3.6 之后的项目中,f-string 几乎没有理由不使用。

它不仅让你的代码更加简洁、清晰,还能提高执行效率,减少错误发生的可能性。

结语

总的来说,f-string 是 Python 字符串格式化的未来。它比 % 和 format() 都要更加简洁和高效,尤其是在日常开发中,使用 f-string 能大大提升编码体验。

如果你还在使用老旧的格式化方式,不妨试试 f-string,你会发现写代码变得更加轻松愉快。

希望大家在今后的开发中,多多尝试和拥抱这些新特性,让自己的代码更优雅、更简洁!

目前,对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。

🔥虎哥私藏精品 热门推荐🔥

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

资料包含了《IDEA视频教程》、《最全python面试题库》、《最全项目实战源码及视频》及《毕业设计系统源码》,总量高达650GB。全部免费领取!全面满足各个阶段程序员的学习需求。