当组合变量和要在Python中打印的字符串时,似乎有很多方法可以做同样的事情;
test = "Hello"
print "{} World".format(test) #Prints 'Hello World'
print test+" World" #Prints 'Hello World'
print "%s World" % test #Prints 'Hello World'
这些方法在性能,兼容性和一般偏好方面的差异(如果有的话)。即使在开源项目之间,这三种方法似乎也可以互换使用。
答案 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中的%运算符。