>> f"My app name is {name..." />

f 字符串与 str.format()

我.format()在我的 Python 3.5 项目中使用了很多,但我担心它会在下一个 Python 版本中被弃用,因为 f-strings,一种新的字符串文字。

>>> name = "Test"
>>> f"My app name is {name}."
'My app name is Test.'
格式化的字符串功能是否会完全取代旧的.format()?从现在开始,在所有情况下都使用新样式会更好吗?

我明白这是基于“简单胜于复杂”的想法。但是,性能问题呢?它们之间有什么区别吗?或者它只是相同功能的简单外观?

已邀请:
不要,str.format不会(也没有理由)很快离开,引入f前缀字符串的 PEP甚至在其摘要中声明:

本 PEP 不建议删除或弃用任何现有的字符串格式化机制。

引入格式化字符串是为了解决其他格式化字符串方法的一些缺点;如果他们希望他们的代码适用于 Python 3.6+,不要扔掉旧方法并强迫天知道有多少项目使用 f-string。

至于这些的性能,我最初怀疑它们可能更慢似乎是错误的,f-strings 似乎很容易胜过它们的.format对应物:

➜ cpython git:(master) ./python -m timeit -s "a = 'test'" "f'formatting a string {a}'"
500000 loops, best of 5: 628 nsec per loop
➜ cpython git:(master) ./python -m timeit "'formatting a string {a}'.format(a='test')"
100000 loops, best of 5: 2.03 usec per loop
在撰写本文时,这些是针对 CPython 存储库的 master 分支完成的;它们肯定会发生变化:

f-strings,作为一个新功能,可能有可能的优化
对 CPython 的优化可能会.format更快(例如Speedup 方法调用 1.2x)
但实际上,不要太担心速度,而要担心对您和其他人来说更易读的内容。

在许多情况下,这将是f-strings,但在某些情况下format更好

要回复问题请先登录注册