有多种字符串格式化方法:
- 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}"
字符串格式化何时运行,如何避免运行时性能损失?
如果您试图关闭一个重复的问题,该问题只是在寻找一种格式化字符串的方法,请使用 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/