python - 字符串格式 : % vs. .format 与 f-string 文字

标签 python performance string-formatting f-string

有多种字符串格式化方法:

  • Python <2.6: "Hello %s"% name
  • Python 2.6+:"Hello {}".format(name) (使用 str.format)
  • Python 3.6+:f"{name}" (使用 f 字符串)

哪个更好,在什么情况下?


  1. 以下方法的结果是一样的,那么有什么区别呢?

    name = "Alice"
    
    "Hello %s" % name
    "Hello {0}".format(name)
    f"Hello {name}"
    
    # Using named arguments:
    "Hello %(kwarg)s" % {'kwarg': name}
    "Hello {kwarg}".format(kwarg=name)
    f"Hello {name}"
    
  2. 字符串格式化何时运行,如何避免运行时性能损失?


如果您试图关闭一个重复的问题,该问题只是在寻找一种格式化字符串的方法,请使用 How do I put a variable’s value inside a string? .

最佳答案

回答您的第一个问题... .format 在许多方面似乎更加复杂。 % 的一个令人讨厌的地方是它可以接受一个变量或一个元组。你会认为以下方法总是有效的:

"Hello %s" % name

然而,如果 name 恰好是 (1, 2, 3),它会抛出 TypeError。为保证它始终打印,您需要这样做

"Hello %s" % (name,)   # supply the single argument as a single-item tuple

这太丑了。 .format 没有这些问题。同样在您给出的第二个示例中,.format 示例看起来更清晰。

仅用于向后兼容 Python 2.5。


要回答您的第二个问题,字符串格式化与任何其他操作同时发生 - 在评估字符串格式化表达式时。 Python 不是一种惰性语言,它在调用函数之前评估表达式,因此表达式 log.debug("some debug info: %s"% some_info) 将首先评估字符串,例如"some debug info: roflcopters are active",然后该字符串将被传递给 log.debug()

关于python - 字符串格式 : % vs. .format 与 f-string 文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5082452/

相关文章:

python - 套接字编程;通过多个设备传输时文件损坏

python - 无需合并的 Pandas 索引匹配

python - Python 3 namedtuple 子类中的 _asdict 返回空字典

python - 提高 C++ 正则表达式替换性能

python - 使用 Python `format` 对局部变量和全局变量进行模板化

python - 在pandas中读取多标题Excel表

reactjs - 更改url时如何防止react-route重新渲染整个应用程序

c - 对短代码进行可靠的性能测量

json - golang 格式数据一次性转换为 JSON 格式

nested - Python 3 嵌套字符串格式