使用类型提示将 Python 翻译成 Cython

Using type hints to translate Python to Cython

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

Rationale and Goals

This PEP aims to provide a standard syntax for type annotations, opening up Python code to easier static analysis and refactoring, potential runtime type checking, and (perhaps, in some contexts) code generation utilizing type information. [...]

Of these goals, static analysis is the most important.

非目标

Using type hints for performance optimizations is left as an exercise for the reader.

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

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

理论上,可以编写这样的工具,但我不确定是否值得(就编写它的复杂性和产量方面的实际改进而言)。

谢谢。

其他人刚刚询问了 484 和 Cython,PEP-484 Type Annotations with own types,我用几个月前关于 484 和 numpy 的帖子进行了回复。

我怀疑这个主题是否适合 Whosebug。这是一个研究课题,不是 'how do I solve this coding problem' 问题。

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

另一点是 cythonnumpy(以及 numba)与 Py2 的使用与 Py3 一样多,如果不是更多的话。所以 Py 3.5 中最新的 bells-n-whistles 通常被这些用户忽略。 @ 运算符是最近 numpy 用户看重的唯一新增内容。

欢迎您回复,但我可能会根据此问题重复或偏离主题来提名关闭该问题。

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

开发中

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

那是尖端 Python 类型检查工作的地方,而不是这里。