【发布时间】:2012-04-20 01:55:51
【问题描述】:
Python 中的一个常见反模式是在循环中使用+ 连接字符串序列。这很糟糕,因为 Python 解释器必须为每次迭代创建一个新的字符串对象,并且最终会花费二次时间。 (最近的 CPython 版本在某些情况下显然可以对此进行优化,但其他实现则不能,因此不鼓励程序员依赖它。)''.join 是这样做的正确方法。
但是,我听说 (including here on Stack Overflow) 你应该永远使用+ 进行字符串连接,而始终使用''.join 或格式字符串。如果您只连接两个字符串,我不明白为什么会出现这种情况。如果我的理解是正确的,它不应该花费二次时间,而且我认为a + b 比''.join((a, b)) 或'%s%s' % (a, b) 更干净,更具可读性。
使用+ 连接两个字符串是一种好习惯吗?还是有我不知道的问题?
【问题讨论】:
-
它更整洁,您可以更好地控制不进行连接。但是它的速度稍慢,字符串抨击权衡:P
-
您是说
+更快还是更慢?为什么? -
+ 更快,
In [2]: %timeit "a"*80 + "b"*801000000 loops, best of 3: 356 ns per loopIn [3]: %timeit "%s%s" % ("a"*80, "b"*80)1000000 loops, best of 3: 907 ns per loop -
In [3]: %timeit "%s%s" % (a, b) 1000000 loops, best of 3: 590 ns per loopIn [4]: %timeit a + b 10000000 loops, best of 3: 147 ns per loop -
@JakobBowyer 和其他人:“字符串连接不好”参数几乎与速度无关,而是利用
__str__的自动类型转换。有关示例,请参阅我的答案。
标签: python string-concatenation anti-patterns