Python打印/格式方法之间的区别

时间:2011-08-05 17:43:32

标签: python

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

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

这些方法在性能,兼容性和一般偏好方面的差异(如果有的话)。即使在开源项目之间,这三种方法似乎也可以互换使用。

3 个答案:

答案 0 :(得分:8)

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

print test+" World"是效率最高的,但性能最佳的

print "%s World" % test #Prints 'Hello World'基本上类似于C sprintf,它进行字符串插值。 我喜欢使用这种方法,因为你不仅可以传入常规字符串,还可以传入字典。

print "Good morning %(name), there are %(count)d new articles in %(topic)s today. Would you like to <a href='%(url)s'>read them</a>?" % values

我个人没有使用"{} World".format(test)

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

答案 1 :(得分:8)

一个小基准:

>>> 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用于放置值,例如"Hello, my name is {}.".format(name)

有传言称在Python 3中不推荐使用%格式并删除它,但事实并非如此。

答案 2 :(得分:1)

据我所知,第三项已被弃用,如python docs中所述。它在Python 3.x及更高版本中被删除。第二个实际上是两个语句,字符串连接和字符串的print语句。

更新

看来我的信息有点偏差。来自what's new in python 3.0页面:

  

PEP 3101:高级字符串格式。注意:2.6描述   提到了8位和Unicode字符串的format()方法。在   3.0,只支持str类型(支持Unicode的文本字符串)   这种方法;字节类型没有。该计划最终将成为现实   这是字符串格式化的唯一API,并开始弃用   Python 3.1中的%运算符。