有多种字符串格式化方法:
- Python <2.6:
"Hello %s" % name
- Python 2.6+:
"Hello {}".format(name)
(使用str.format
) - Python 3.6+:
f"{name}"
(使用 f 字符串)
哪个更好,在什么情况下?
- 以下方法具有相同的结果,那么有什么区别?
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}"
- 字符串格式化何时运行,如何避免运行时性能损失?
如果您试图关闭一个重复的问题,该问题只是在寻找一种格式化字符串的方法,请使用 如何将变量的值放入字符串中? .
原文由 NorthIsUp 发布,翻译遵循 CC BY-SA 4.0 许可协议
回答你的第一个问题……
.format
在许多方面似乎更复杂。关于%
的一个恼人的事情也是它可以接受一个变量或一个元组。你会认为以下方法总是有效的:然而,如果
name
恰好是(1, 2, 3)
,它会抛出一个TypeError
。为了保证它总是打印,你需要做这很丑陋。
.format
没有这些问题。同样在您给出的第二个示例中,.format
示例看起来更清晰。仅将其用于与 Python 2.5 的向后兼容。
要回答您的第二个问题,字符串格式化与任何其他操作同时发生 - 在评估字符串格式化表达式时。而 Python 不是一种惰性语言,它在调用函数之前评估表达式,因此表达式
log.debug("some debug info: %s" % some_info)
将首先评估字符串,例如"some debug info: roflcopters are active"
,然后该字符串将传递给log.debug()
。