是python + =字符串连接不好的做法?

时间:2016-09-24 11:37:39

标签: python string string-concatenation

我正在阅读The Hitchhiker’s Guide to Python并且有一段简短的代码段

foo = 'foo'
bar = 'bar'

foobar = foo + bar  # This is good
foo += 'ooo'  # This is bad, instead you should do:
foo = ''.join([foo, 'ooo'])

作者指出''.join()并不总是比+快,所以他不反对使用+进行字符串连接。

但为什么foo += 'ooo'是不良做法,而foobar=foo+bar被认为是好的?

  • foo += bar好吗?
  • foo = foo + 'ooo'好吗?

在此代码段之前,作者写道:

  

关于字符串的最后一件事是使用join()并不总是最好的。在您从预定数量的字符串创建新字符串的实例中,使用加法运算符实际上更快,但在上述情况下或者在您添加到现有字符串的情况下,使用join()应该是你喜欢的方法。

2 个答案:

答案 0 :(得分:36)

这是不好的做法吗?

有理由认为这个例子并不坏,因为:

  • 作者没有给出任何理由。也许这只是他/她的不喜欢。
  • Python文档没有提到这是不好的做法(从我所看到的)。
  • foo += 'ooo'同样可读(据我所知),比foo = ''.join([foo, 'ooo'])快约100倍。

何时应该使用另一个?

字符串连接的缺点是需要为每个连接创建一个新字符串并分配新内存 !这很费时间,但对于少量和小字符串来说并不是那么重要。当你知道要连接的字符串数量并且不需要超过2-4个串联时,我会去找它。

连接字符串时,Python只需为最终字符串分配新内存,效率更高,但计算时间可能更长。另外,因为字符串是不可变的,所以使用字符串列表动态变异通常更实际,并且只在需要时将其转换为字符串。

使用str.join()创建字符串通常很方便,因为它需要可迭代。例如:

letters = ", ".join("abcdefghij")

结束

在大多数情况下,使用str.join()更有意义,但有时连接也同样可行。对于大字符串或许多字符串使用任何形式的字符串连接都是不好的做法,就像我自己认为使用str.join()对于简短和少量字符串一样糟糕的做法。

我认为作者只是试图创建一个经验法则,以便更容易识别何时使用而不会过多细节或使其变得复杂。

答案 1 :(得分:-3)

如果字符串的数量很少并且字符串是预先知道的,我会去:

foo = f"{foo}ooo"

使用 f-strings。但是,这仅从 python 3.6 开始有效。