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

2024-06-10 01:02:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在阅读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'好吗?

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

One final thing to mention about strings is that using join() is not always best. In the instances where you are creating a new string from a pre-determined number of strings, using the addition operator is actually faster, but in cases like above or in cases where you are adding to an existing string, using join() should be your preferred method.


Tags: theto代码youfooisbar作者
1条回答
网友
1楼 · 发布于 2024-06-10 01:02:00

这是不好的做法吗?

有理由认为,对于本例来说,这并不是一个坏做法,因为:

  • 作者没有给出任何理由。也许只是他/她不喜欢。
  • Python文档并没有提到这是一个糟糕的实践(从我所看到的情况来看)。
  • foo += 'ooo'foo = ''.join([foo, 'ooo'])一样可读(根据我的说法),大约比foo = ''.join([foo, 'ooo'])快100倍。

什么时候用一个代替另一个?

串接的缺点是需要为每个串接创建一个新字符串并分配新内存!这是很费时的,但是用很少的和很小的字符串就没什么大不了的。当你知道要连接的字符串的数量,并且不需要超过2-4个连接时,我会选择它。


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

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

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

结束

在大多数情况下,使用str.join()更有意义,但有时连接也是可行的。在我看来,对大字符串或多字符串使用任何形式的字符串连接都是不好的做法,就像对短字符串和少数字符串使用str.join()一样。

我相信作者只是试图建立一个经验法则,以便更容易地确定何时使用什么,而不需要太多细节或使其复杂化。

相关问题 更多 >