Python way of printing: with 'format' or percent form?
在Python中,似乎有两种不同的生成格式化输出的方法:
1 2 3 4
| 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?
使用format方法,特别是当您关心python 3和未来时。从文档中:
The formatting operations described here [% substitutions] are obsolete and may go away in future versions of Python. Use the new String Formatting in new code.
- 新的文档对percent运算符做了这样的描述:"这里描述的格式化操作显示了各种各样的怪癖,这些怪癖导致了许多常见的错误……",但它并没有被弃用。docs.python.org/3/library/…
- 它并没有被正式否决,但我们鼓励您不要使用它。
- 相关:bugs.python.org/issue14123
- 格式是否明显慢于%?
- 在python3.6中,可以使用f字符串访问以前定义的变量:print(f"{user} asked {number} questions on stackoverflow.com"。
肾盂2.6中引入了.format。
如果需要与早期Python进行向后兼容性,则应该使用EDCOX1 OR 3
对于Python 3和NeXER,您应该使用EDCOX1 2
.format比%更强大。把%移植到.format是很容易的,但另一种方法是非常简单的。
- 它是如何变得更强大的?
- @Yossi这里有一个示例stackoverflow.com/a/3228928/174728。它还允许您执行键/索引查找import sys;"{[version]}".format(vars(sys))。
- 怎么样:import sys;"%(version)s" % (vars(sys))。
- @pax0r:链接的例子是'{num:{fill}{width}}'.format(num=123, fill='0', width=6)。你不能用%来做这个,除非你"双重逃避"并应用它两次。
- "%s"%(str(123).rjust(6,'0'))
- @肖恩,这是格式化字符串,不是数字。如果我只是以某种方式将一个值操纵成一个字符串,就根本不需要一个额外的格式化层。实际上,'%s'%并没有为您已经创建的字符串添加任何额外的内容。
- ideone.com/fsizfy网站
两者都可以使用。没有人说%格式化表达式是不推荐使用的。但是,正如前面所述,格式化方法调用的功能更强大。还要注意,%表达式更简洁,也更容易编码。试试看哪种表达式最适合你。
- 可能值得注意的是,logging模块使用类似%的语法,因此出于一致性的原因,它可能是首选的。
文档说新代码首选format方法。但是,目前没有删除%格式的计划。