Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用类型提示将Python转换为Cython_Python_Optimization_Cython_Type Hinting - Fatal编程技术网

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

使用类型提示将Python转换为Cython,python,optimization,cython,type-hinting,Python,Optimization,Cython,Type Hinting,类型提示现在在Python 3.5版本中可用。在规范()中,明确说明了目标(和非目标): 理由和目标 本PEP旨在为类型注释提供标准语法,使Python代码更易于静态分析和重构,潜在的运行时类型检查,以及(可能在某些上下文中)利用类型信息生成代码。 [……] 在这些目标中,静态分析是最重要的 非目标 使用性能优化的类型提示留给读者作为练习 另一方面,Cython长期以来一直使用静态语法来提高性能。通常,人们用Cython语法重写一些代码片段,编译它们,然后将它们作为独立模块导入。在一个庞大的代码

类型提示现在在Python 3.5版本中可用。在规范()中,明确说明了目标(和非目标):

理由和目标 本PEP旨在为类型注释提供标准语法,使Python代码更易于静态分析和重构,潜在的运行时类型检查,以及(可能在某些上下文中)利用类型信息生成代码。 [……]

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

非目标 使用性能优化的类型提示留给读者作为练习

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

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

从理论上讲,编写这样的工具是可能的,但我不确定是否值得(就编写它的复杂性和实际的改进而言)


谢谢

有人刚刚问了484和Cython,我用几个月前关于484和numpy的帖子回答了

我怀疑这个话题是否适合Stackoverflow。这是一个研究主题,而不是“我如何解决这个编码问题”的问题

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

另一点是,Py2使用的
cython
numpy
(和
numba
)与Py3一样多(如果不是更多的话)。因此,Py3.5中最新的bells-n-whistles通常被这些用户忽略。
@
操作符是最近添加的唯一一个
numpy
用户值的操作符

欢迎您回答,但我可以提名这个问题作为结束,因为它是重复的或离题的

打字
模块正在

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


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

当您使用了
cython
时,您转换了多少Python代码?我认为理想的做法是将注意力集中在一个子集上,在这个子集中速度很重要,而将其余部分留在Python中。或者使用
cython
作为现有C++/Fortran代码的桥梁。