Python语言中有像C#中的StringBuilder
这样的字符串类吗?
发布于 2016-04-12 02:26:10
依赖编译器优化是脆弱的。Antoine-tran给出的答案和数字中链接的基准是不可信任的。Andrew Hare犯了一个错误,在他的方法中包含了对repr
的调用。这同样减慢了所有方法的速度,但模糊了构造字符串时的实际惩罚。
使用join
。它非常快,也更健壮。
$ ipython3
Python 3.5.1 (default, Mar 2 2016, 03:38:02)
IPython 4.1.2 -- An enhanced Interactive Python.
In [1]: values = [str(num) for num in range(int(1e3))]
In [2]: %%timeit
...: ''.join(values)
...:
100000 loops, best of 3: 7.37 µs per loop
In [3]: %%timeit
...: result = ''
...: for value in values:
...: result += value
...:
10000 loops, best of 3: 82.8 µs per loop
In [4]: import io
In [5]: %%timeit
...: writer = io.StringIO()
...: for value in values:
...: writer.write(value)
...: writer.getvalue()
...:
10000 loops, best of 3: 81.8 µs per loop
发布于 2013-11-02 21:37:50
使用上面的方法5(伪文件),我们可以获得非常好的性能和灵活性
from cStringIO import StringIO
class StringBuilder:
_file_str = None
def __init__(self):
self._file_str = StringIO()
def Append(self, str):
self._file_str.write(str)
def __str__(self):
return self._file_str.getvalue()
现在使用它
sb = StringBuilder()
sb.Append("Hello\n")
sb.Append("World")
print sb
https://stackoverflow.com/questions/2414667
复制相似问题