2012-09-12 65 views
83

在Python似乎有要产生格式化输出的两种不同的方式:Python的打印方式:用'格式'还是百分比形式?

user = "Alex" 
number = 38746 
print("%s asked %d questions on stackoverflow.com" % (user, number)) 
print("{0} asked {1} questions on stackoverflow.com".format(user, number)) 

是否有要优于另一种方式吗?它们是否相同,有什么区别?应该使用哪种形式,特别是对于Python3?

回答

85

使用format方法,特别是如果你关心Python 3和未来。 From the documentation

此处描述的格式化操作[%substitutions]已过时,可能会在未来版本的Python中消失。在新代码中使用新的字符串格式。

+14

新文档说明了有关运算符百分比的问题:“这里描述的格式化操作表现出各种各样的怪癖,一些常见的错误......“但它不是**不推荐使用。 http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting – guettli

+2

尚未正式废弃,但我们鼓励您不要使用它。 – BrenBarn

+1

相关:http://bugs.python.org/issue14123 – guettli

5

The docsformat方法是新代码的首选方法。但是,目前还没有计划去除%格式。

18

.format在python2.6的

介绍如果您需要与早期的Python的向后兼容性,您应该使用%

对于Python3和更新你应该使用.format肯定

.format更强大比%。移植%.format很容易,但其他方式可以是非平凡的

+0

它是如何更强大的? – yossi

+4

@yossi下面是一个例子http://stackoverflow.com/a/3228928/174728。它还可以让你做键/索引查找'import sys ;“{[version]}”.format(vars(sys))' –

+2

'012xx'import sys;“%(version)s”%(vars(sys))' – Pax0r

6

您可以使用两个。 另请注意,%表达式更简洁,更易于编码。试试看看最适合您的是什么

+0

可能值得注意的是,'logging'模块使用类似'%'的语法,因此可能出于一致性原因而优选。 – sshilovsky