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

2023-12-23

类型提示现在在 Python 3.5 版本中可用。在规范中(PEP 484 https://www.python.org/dev/peps/pep-0484/)目标(和非目标)清晰可见:

理由和目标

该 PEP 旨在为类型注释提供标准语法,开放 Python 代码以更轻松地进行静态分析和重构、潜在的运行时类型检查以及(也许在某些情况下)利用类型信息的代码生成。 [...]

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

非目标

使用类型提示性能优化留给读者作为练习。

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

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

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

Thanks.


其他人刚刚问了 484 和 Cython,PEP-484 具有自己类型的类型注释 https://stackoverflow.com/questions/38005633/pep-484-type-annotations-with-own-types,我用几个月前关于 484 和 numpy 的帖子进行了回应。

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

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

还有一点是cython and numpy (and numba)与 Py2 一起使用的情况与 Py3 一样多,甚至更多。因此,这些用户通常会忽略 Py 3.5 中的最新功能。这@运算符是最近添加的唯一一个numpy用户价值。

欢迎您做出回应,但我可能会因为该问题重复或偏离主题而提名该问题结束。

The typing模块正在开发中https://github.com/python/typing https://github.com/python/typing

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用类型提示将 Python 转换为 Cython 的相关文章

  • Python 类型提示 Dict 语法错误 可变默认值是不允许的。使用“默认工厂”

    我不知道为什么解释器会抱怨这个类型的字典 对于这两个实例 我得到一个 不允许可变默认值 使用默认工厂 语法错误 我使用的是 python 3 7 3 from dataclasses import dataclass from typing
  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 如何使用 Selenium 和 ChromeDriver 解决 TypeError: 'module' object is not callable 错误 [重复]

    这个问题在这里已经有答案了 代码试验 from selenium import webdriver from selenium webdriver chrome options import Options as Chromeoptions
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • 如何以正确的方式为独立的Python应用程序制作setup.py?

    我读过几个类似的主题 但还没有成功 我觉得我错过或误解了一些基本的事情 这就是我失败的原因 我有一个用 python 编写的 应用程序 我想在标准 setup py 的帮助下进行部署 由于功能复杂 它由不同的 python 模块组成 但单独
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c

随机推荐