Python打印/格式化方法之间的差异

Python打印/格式化方法之间的差异,python,Python,当组合一个变量和一个字符串以在Python中打印时,似乎有很多方法可以完成同样的事情 test = "Hello" print "{} World".format(test) #Prints 'Hello World' print test+" World" #Prints 'Hello World' print "%s World" % test #Prints 'Hello World' 这些方法在性能、兼容性和总体偏好方面有什么区别(如果有的话)。即使在开源项目之间,这三种方法似乎也可以

当组合一个变量和一个字符串以在Python中打印时,似乎有很多方法可以完成同样的事情

test = "Hello"
print "{} World".format(test) #Prints 'Hello World'
print test+" World" #Prints 'Hello World'
print "%s World" % test #Prints 'Hello World'

这些方法在性能、兼容性和总体偏好方面有什么区别(如果有的话)。即使在开源项目之间,这三种方法似乎也可以互换使用。

正如您所提到的,各种开源项目将使用所有这些方法进行字符串格式化。然而,我会坚持一个项目使用一种方法,以免混淆其他具有不同风格的开发人员

print test+“World”
是效率最高、性能最好的,但灵活性最低

打印“%s World”%test#打印“Hello World”
基本上类似于C的
sprintf
,它执行字符串插值。 我非常喜欢使用这个方法,因为你不仅可以传入一个常规字符串,还可以传入一个字典

打印“早上好%(姓名),今天有%(计数)d篇新文章在%(主题)中。是否要?”%value

我没有亲自使用过
“{}World.format(test)


在实际应用中,这些方法之间的性能差异是微不足道的,这实际上是关于坚持风格而不是过度编码。

据我所知,第三项已被弃用为第一项,如python文档中所述。它在Python3.x及更高版本中被删除。第二个是两条语句,一条字符串连接语句和一条字符串的打印语句

更新:

看来我的信息有点不对劲。从页面:

PEP 3101:高级字符串格式。注:2.6说明 提到8位字符串和Unicode字符串的format()方法。在里面 3.0,只有str类型(支持Unicode的文本字符串)支持 这种方法;字节类型不正确。这项计划最终将要达成 这是用于字符串格式设置的唯一API,并且要开始弃用 %Python 3.1中的运算符

一个小基准:

>>> a = lambda: "{} World".format("Hello")
>>> b = lambda: "Hello" + " World"
>>> c = lambda: "%s World" % "Hello"
>>> d = lambda: "".join(("Hello", " World"))
>>> a(), b(), c(), d()
('Hello World', 'Hello World', 'Hello World', 'Hello World')
>>> timeit.timeit(a)
0.7830071449279785
>>> timeit.timeit(b)
0.18782711029052734
>>> timeit.timeit(c)
0.18806695938110352
>>> timeit.timeit(d)
0.3966488838195801
看起来b和c是最快的,在d之后,a是最慢的

但是,如果你不做大量的处理,使用哪一种并不重要,只是最好不要混合使用

我个人更喜欢
”.join
用于简单的概念,str.format用于放置值,比如
“你好,我的名字是{}。”.format(name)


有传言说,
%
格式将在Python3中被弃用和删除,但事实并非如此

你为什么要担心表演。。。打印报表的格式?你打算印多少?哈哈。他们都差不多。使用任何有效的方法。@awfullyjohn我想这更多的是一个理论问题,而不是一个实际问题,我只是想知道不同方法背后是否有任何历史。请阅读您对该主题性能的担忧(python和C#具有类似的字符串实现,因此结论同样适用)“%s”%x在Python3中没有被删除,而且可能永远也不会被删除。这是非常误导的。您的结论仅适用于少量短字符串,而不适用于字符串、长字符串或更多字符串以外的类型。随着子字符串的数量和长度的变化,相对速度也会发生变化,尤其是
b
随着字符串变长或变多而变慢。另外,
b
d
要求将要连接的内容作为字符串,而
a
c
则不需要。虽然
a
c
大致相似,
a
是最强大的。timeit.timeit在哪个软件包中?我查看了Pypi,但什么也没找到,看起来useful@samarudge,timeit:)。只需
导入timeit;timeit.timeit(…)