我建议你在cpython.array.arrays上进行你的操作.最好的文档是C API和Cython源码,我太懒了链接了.
from cpython cimport array
def cfuncA():
cdef str a
cdef int i,j
for j in range(1000):
a = ''.join([chr(i) for i in range(127)])
def cfuncB():
cdef:
str a
array.array[char] arr,template = array.array('c')
int i,j
for j in range(1000):
arr = array.clone(template,127,False)
for i in range(127):
arr[i] = i
a = arr.tostring()
请注意,所需的操作与您对字符串的操作有很大的不同.
>>> python2 -m timeit -s "import pyximport; pyximport.install(); import cyytn" "cyytn.cfuncA()"
100 loops,best of 3: 14.3 msec per loop
>>> python2 -m timeit -s "import pyximport; pyximport.install(); import cyytn" "cyytn.cfuncB()"
1000 loops,best of 3: 512 usec per loop
在这种情况下,这是一个30倍的加速.
另外,FWIW,您可以用arr.data.as_chars [:len(arr)]替换arr.tostring(),并输入一个字节,从而取消另外几个μs.