Python的打印方式:使用'格式'还是百分比形式?

Ale*_*lex 94 python printing format

在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))
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以优先于另一种方式?它们是等价的,有什么区别?应该使用什么形式,特别是对于Python3?

Bre*_*arn 103

使用该format方法,特别是如果您关注Python 3和未来.从文档:

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

  • 新文档说明了这个百分比运算符:"这里描述的格式化操作表现出各种怪癖,导致许多常见错误......"但它不被**弃用.http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting (17认同)
  • 从Python 3.6中,您可以[使用f-strings访问以前定义的变量](https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-pep498):`print(f"{user} ask stackoverflow.com上的{number}个问题"` (7认同)
  • 它没有被正式弃用,但我们鼓励你不要使用它. (3认同)

Joh*_*ooy 23

.format 是在Python2.6中引入的

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

对于Python3和更新版本,您应该.format确定使用

.format比...更强大%.移植%.format很容易,但反过来可能是非常重要的

  • @yossi这是一个例子http://stackoverflow.com/a/3228928/174728.它还允许你进行键/索引查找`import sys;"{[version]}".format(vars(sys))` (7认同)
  • 如何:`import sys;"%(version)s"%(vars(sys))` (2认同)
  • @ Pax0r:链接的例子是''{num:{fill} {width}}'.format(num = 123,fill ='0',width = 6)`.除非你"双重逃避"并将其应用两次,否则不能用`%`来执行此操作 (2认同)

小智 8

文档说该format方法是新代码的首选.但是,目前没有计划删除%格式.


dev*_*saw 8

你可以使用两者.没有人说过%格式表达式已被弃用.但是,如前所述,格式方法调用有点强大.另请注意,%表达式更简洁,更容易编码.尝试使用它们,看看哪种方式最适合您