擅长:python、mysql、java
<P> C++不仅是因为向量和元素的静态声明,而且是因为使用模板/泛型,向量指定<EEM >只有EEM>包含某个类型的元素,例如具有三个元素的元组的向量。Cython做不到最后一件事,而且听起来很重要——它必须在编译时强制执行,不知怎么的(运行时的类型检查是Python已经做的)。所以现在,当你在Cython中从列表中弹出某个内容时,无法预先知道它是什么类型,而将它放入类型变量中只会添加一个typecheck,而不是speed。这意味着在这方面无法绕过Python解释器,在我看来,这是Cython在非数值任务中最关键的缺点。</p>
<p>解决这个问题的手动方法是用一个cdef类将python list/dict(或者std::vector)与一个特定类型的元素或键值组合进行子类化。这相当于模板生成的代码。只要在Cython代码中使用生成的类,它就应该提供改进。</p>
<p>使用数据库或数组只是解决了一个不同的问题,因为这涉及到将任意对象(但具有特定类型,最好是cdef类)放入容器中。</p>
<p>而且std::map不应该与dict进行比较;std::map按排序顺序维护键,因为它是一个平衡树,dict解决了另一个问题。更好的比较是dict和Google的hashtable。</p>