【发布时间】:2013-08-13 21:41:56
【问题描述】:
我有一个继承自std::vector<char> 的 C++ 缓冲区对象。我想将此缓冲区转换为 Python 字符串,以便我可以通过 Twisted 的 protocol.transport.write 通过网络将其发送出去。
我想到的两种方法是(1)制作一个字符串并按字符填充它:
def scpychar(buf, n):
s = ''
for i in xrange(0, n):
s += buf[i]
return s
和 (2) 制作一个 char 数组(因为我知道缓冲区有多大),填充它并将其转换为字符串
def scpyarr(buf, n):
a = array.array('c','0'*n)
for i in xrange(0, n):
a[i] = buf[i]
return a.tostring()
我原以为 (1) 每次调用 s += buf[i] 时都必须创建一个新的字符串对象,并复制旧字符串的内容。所以我期待(2)比(1)快。但是如果我使用 timeit 进行测试,我发现 (1) 实际上是 (2) 的两倍。
我想知道是否有人可以解释为什么 (1) 更快?
从std::vector<char> 转换为 Python 字符串的更有效方式的奖励积分。
【问题讨论】:
标签: python arrays string performance stdvector