【发布时间】:2014-05-28 15:38:47
【问题描述】:
我试图向我们的团队展示 Cython 在提高 Python 性能方面的优点。我已经展示了几个基准,所有这些都通过以下方式加速:
- 编译现有 Python 代码。
- 将 cdef 用于静态类型变量,尤其是在内部循环中。
但是,我们的大部分代码都进行了字符串操作,而且我还没有想出通过键入 Python 字符串来优化代码的好例子。
我试过的一个例子是:
cdef str a
cdef int i,j
for j in range(1000000):
a = str([chr(i) for i in range(127)])
但将 'a' 作为字符串键入实际上会使代码运行速度变慢。我已阅读有关“Unicode 和传递字符串”的文档,但对它在我展示的情况下的应用感到困惑。我们不使用 Unicode——一切都是纯 ASCII。我们使用的是 Python 2.7.2
感谢任何建议。
【问题讨论】:
-
这是 Python 2 吗?如果是这样,为什么要使用
range? -
你的意思是,使用 xrange?
-
真的,我对最后一行代码的意思是:''.join([chr(i) for i in range(127)])
-
我注意到声明:cdef char* a 非常快,但这会使循环中的 a 成为临时变量,因此您必须在循环中重新分配以使其工作。
-
重新分配有问题吗?如果没有基准测试循环,您只需分配一次,对吧?
标签: python string performance optimization cython