Python打印/格式化方法之间的差异
当组合一个变量和一个字符串以在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' 这些方法在性能、兼容性和总体偏好方面有什么区别(如果有的话)。即使在开源项目之间,这三种方法似乎也可以
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(…)