组合变量和要在Python中打印的字符串时,似乎有很多方法可以做同样的事情;
test = "Hello"
print "{} World".format(test) #Prints 'Hello World'
print test+" World" #Prints 'Hello World'
print "%s World" % test #Prints 'Hello World'
Run Code Online (Sandbox Code Playgroud)
这些方法在性能,兼容性和一般偏好方面的差异(如果有的话).即使在开源项目之间,所有三种方法似乎都可以互换使用.
如前所述,各种开源项目将使用所有这些方法进行字符串格式化.但是,我会坚持一个项目的方法,以免混淆不同风格的其他开发人员.
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)亲自用过.
在实际应用中,这些方法之间的性能差异是微不足道的,它实际上是坚持风格而不是过度编码.
一点基准:
>>> 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
Run Code Online (Sandbox Code Playgroud)
看起来像b和c是最快的,在d之后,令人惊讶的是a是最慢的.
但是,如果你不进行大量处理,那么使用哪一个并不重要,最好不要将它们混合使用.
我个人更喜欢"".join简单的概念,而str.format用于放置值,比如"Hello, my name is {}.".format(name).
有传言称%Python 3 中的格式化将被弃用并删除,但事实并非如此.