使用类型提示将Python转换为Cython

时间:2016-06-24 17:10:29

标签: python optimization cython type-hinting

现在可以在Python 3.5版本中使用类型提示。在规范(PEP 484)中,目标(和非目标)明确地暴露出来:

  

理由和目标

     
    

此PEP旨在为类型注释提供标准语法,打开Python代码以更容易进行静态分析和重构,潜在的运行时类型检查,以及(可能在某些情况下)利用类型信息生成代码。     [...]

         

在这些目标中,静态分析是最重要的。

  
     

非目标

     
    

使用效果优化的类型提示留给读者练习。

  

另一方面,Cython已经使用了很长时间的静态语法来提高性能。通常,人们用Cython语法重写一些代码,编译它们,然后将它们作为独立模块导回。在大型代码库上完成所有这些工作是一项痛苦的工作。但最糟糕的是,即使您正确地遵循了上述所有步骤,您也无法保证您将获得真正的改进(因为如果您使用某些模块可能会导致兼容性问题)。

编写一个工具是一项艰巨的任务,使用这种新类型的提示分散在代码中的东西自动将它们转换为Cython语法,并可能完成其余的工作job(将它们编译成模块并将它们全部导回)?因此,可以在所有代码库中共享相同的语言语法。

理论上,有可能编写一个这样的工具,但我不确定是否值得(就编写复杂性和实际收益而言)。

感谢。

1 个答案:

答案 0 :(得分:6)

其他人只是询问了484和Cython,PEP-484 Type Annotations with own types,并且我在几个月前回复了一个关于484和numpy的帖子。

我怀疑这个主题对Stackoverflow的适用性。这是一个研究课题,而不是“如何解决这个编码问题”的问题。

基于有限的阅读,484中的类型提示是初步的,任何使用仅限于484位作者开发的代码检查器。 Py3已经有很长一段时间的注释,但我看到很少有包含它们的代码示例。当然不在我关注的numpy代码中。

另一点是,cythonnumpy(和numba)与Py2一起使用,如果不是更多,则与Py3一样多。因此,这些用户通常会忽略Py 3.5中最新的铃声。 @运算符是numpy用户重视的唯一最近添加。

欢迎您回复,但我可以提出这个问题,因为它是重复或非主题的。

正在https://github.com/python/typing

开发typing模块

mypy是基于484的类型检查器,https://github.com/python/mypy(有趣的是,~/mypy是我放置所有SO测试脚本的目录。)

这就是前沿Python类型检查工作正在进行的地方,而不是在这里。