速度与安全性与在Python中进行字符串连接的方法的兼容性

cre*_*gox 7 python string concatenation

在同一主题上也提出了类似的问题(在那里进行了良好的速度比较).希望这个问题不同,并更新到Python 2.63.0.

到目前为止,我认为更快,最兼容的方法(在不同的Python版本中)是简单的简单+符号:

text = "whatever" + " you " + SAY
Run Code Online (Sandbox Code Playgroud)

但我一直听到并且阅读它并不安全和/或可取.

我甚至不确定有多少方法可以操纵字符串!我能数只有约4:有插值及其所有子选项,如%format,然后有简单的,join+.

最后,新的方法,以字符串格式化,这与format,肯定是不好的在同一时间向后兼容性使得%向前兼容性不好.但是,每当我们将自己限制在3.x时,它是否应该用于每个字符串操作,包括每个连接?

好吧,也许这更像是一个维基而不是一个问题,但我确实希望得到一个答案,即每个字符串操作方法的正确用法.哪一个可以通常用于每个焦点(最好的兼容性,速度和安全性).

谢谢.

编辑:我不确定我是否应该接受答案,如果我觉得它没有真正回答这个问题......但我的观点是,他们所有人都在一起做了一份正确的工作.

丹尼尔投票最多的答案实际上是我更愿意接受的答案,如果不是"笔记"的话.我非常不同意"连接是严格使用+运算符来连接字符串",因为,对于一个,join也会进行字符串连接,我们可以为此构建任意库.

目前所有3个答案都是有价值的,我宁愿将一些答案混合在一起.虽然没有人自愿这样做,但我想通过选择较少投票的人(但比THC4k更广泛,这更像是一个大而且非常受欢迎的评论)我也可以引起对其他人的关注.

Dan*_*olo 5

作为一个注释:事实上,这完全是关于字符串构造而不是连接本身,因为连接是严格使用+运算符一个接一个地连接字符串.

  • +(串联) - 通常效率低但但对于某些人来说可能更容易阅读,仅在可读性优先且性能不高时才使用(简单脚本,一次性脚本,非性能密集型代码)
  • join(从字符串序列构建一个字符串) - 当你有一个字符串序列需要使用一个公共字符连接时使用它(如果你想使用空字符串''加入,则根本没有字符)
  • %format(插值) - 基本上每个其他操作都应该使用其中任何一个是合适的,根据代码生命周期中要支持的Python版本选择适合的操作符/函数(%用于2.x和format3) .X)


wis*_*sty 3

使用+是可以的,但如果是自动化的则不行:

a + small + number + of + strings + "is pretty fast"
Run Code Online (Sandbox Code Playgroud)

但这可能会非常慢:

s = ''
for line in anything:
   s += line 
Run Code Online (Sandbox Code Playgroud)

使用这个代替:

s = ''.join([line for line in anything])
Run Code Online (Sandbox Code Playgroud)

+使用和使用都有优点和缺点'%s%line'- 使用+会在这里失败:

s = 'Error - unexpected string' + 42
Run Code Online (Sandbox Code Playgroud)

您是否希望它抛出异常,或者默默地做一些不寻常的事情取决于您的用途。

  • `s = ''.join([line for line in everything])` 有一个无意义的循环来构造一个无意义的列表 -> `s=''.join(anything)` (6认同)
  • @THC4k,如果“anything”是一个迭代器,那并不是毫无意义的。`''.join` 需要一个列表,而不是迭代器。 (2认同)