Py_None 的值

2024-02-07

我很清楚None用于表示缺乏价值。但由于在实现过程中一切都必须有一个潜在的价值,所以我想看看使用了什么值来表示没有值,关于CPython.

我理解,基于文档 https://docs.python.org/3/c-api/none.html#c.Py_None, that NoneObject是一个单例。自从我的c技能已经生锈了,我最好的、业余的猜测是,None将是指向分配给的内存的指针Py_None目的;因为它是一个单例,这将保证唯一性。或者它被分配给c's NULL其值为0x0000基于第二个答案这个问题 https://softwareengineering.stackexchange.com/questions/147713/where-are-null-values-stored-or-are-they-stored-at-all?

此外,文档还指出:

请注意,None 的 PyTypeObject 并未直接在 Python/C API 中公开。

我猜这意味着您无法通过源代码搜索找到它。 (我这样做了,不知道去哪里寻找object.c https://hg.python.org/cpython/file/c6880edaf6f3/Objects/object.c天真地相信我能理解任何事情)

但我不确定我对此的看法,所以我问。

是什么c的电平值Py_None对象在CPython?


Py_None是一个宏定义Include/object.h。它是一个别名_Py_NoneStruct in object.c这是一个静态(如在存储中)全局变量PyObject类型(这是一个结构)。它在 Python 术语中被指定为NoneType(在其上方定义object.c并且仅使用一次_Py_NoneStruct).

所以它不是 NULL 或 C 中的任何其他特殊值,它是一个单例PyObject的实例_PyNone_Type。至于_PyNone_Type PyTypeObject没有被曝光,我想他们指的是static关键字(即内部链接),这意味着PyTypeObject只能在以下范围内访问object.c并且仅用于定义一次PyNone.

只是补充一点,每当文档说PyNone没有类型,不应该从字面上理解。它有一种特殊的类型,NoneType,您仍然可以通过None单例,但您无法创建新实例或执行普通类型可以执行的任何其他操作。似乎存在不创建新实例的硬编码限制,尽管我无法准确找到它在 CPython 源代码中定义的位置,但您可以在尝试创建新实例时看到其效果:

>>> type(None)
<type 'NoneType'>
>>> type(None)()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot create 'NoneType' instances

编辑:似乎错误是从typeobject.c当。。。的时候tp_new字段为 NULL。但令人惊讶的是_PyNone_Type似乎是用非 NULL 定义的tp_new(指向静态none_new in object.c)。之后在某个时候它可能会被设置为 NULL,但这只是一个实现细节,对于您的问题范围并没有真正产生影响。

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

Py_None 的值 的相关文章

随机推荐

  • 如果我使用 Glad 而不是 GLEW,我会错过什么吗?

    我想使用 OpenGL 但我不知道如何设置 GLEW 如果我要使用 Glad 我会失去一些东西吗 我可以从使用 GLEW 的教程中学习吗 如果您开始在桌面平台上使用 OpenGL 进行编程 那么任何一种都可以工作 并且选择并不那么重要 稍后
  • Python shift() 从同一列,就像 Excel 中的日期一样

    我想在 python 中创建 target start 列 id start end diff target start 12220 1999 11 22 2008 08 31 3515 1999 11 22 12220 2018 04 1
  • c# - 如何以编程方式检查解决方案中的引用是否配置正确

    我们遇到了一些构建错误 需要手动修复引用 我想以编程方式检查是否定义了项目引用而不是 dll 引用 因此 请检查解决方案中的所有引用 并针对每个项目检查引用的定义是否正确 这样相关的依赖就会被正确配置 有人知道现有的解决方案吗 我想要一个在
  • 如何将WPF动画逐帧渲染为视频?

    我在 WPF 中创建了一个我喜欢的很好的效果 我希望能够 记录 这个效果 但运行时却很不稳定 有没有办法可以将其转换为逐帧过程并自己将其另存为视频 而不是尝试在播放期间录制它 基本上我想将 WPF 渲染为视频 或列出一系列保存为位图的帧 关
  • Nest.js 中使用 @nestjs/passport 进行可选身份验证

    我有一条需要经过身份验证和未经身份验证的用户使用的路线 我用 UseGuards AuthGuard jwt 启用身份验证 但它会阻止任何未经身份验证的用户访问该路由 正常 如何允许未经身份验证的用户也访问该路由 似乎没有我可以传递的选项A
  • 如何在 Git 中分离子目录但保留所有分支

    我一直在关注这个问题的答案将子目录分离到单独的 Git 存储库中 https stackoverflow com questions 359424 detach subdirectory into separate git reposito
  • UITableView 不重用单元格,这样做的好例子吗?

    我的 UITableView 有 5 个单元格 每个都有一个 UITextField 作为子视图 用户将在其中输入数据 如果我确实使用单元格重用 则当单元格滚动到视图之外时 文本字段将被清除 我不想处理这个问题 有没有办法不重复使用单元格
  • 如何编辑引导程序导航栏的样式?

    我正在尝试编辑引导导航栏的样式 但是 例如 我无法编辑颜色和删除边框 我想将颜色更改为白色 并将边框颜色更改为白色 并且我已包含以下代码 谁能告诉我我做错了什么 navbar default background color ffffff
  • 更改单元格中某些字符的颜色

    我在单元格 A1 中有一句话 我想要其中 50 个 我想将任何数字字符设置为红色文本 只是数字字符 我该怎么做呢 这是我所拥有的框架 Sub RedText Dim i As Integer For i 1 To Len Cells 1 1
  • webpack.config.js 不断将bundle.js 的脚本标记添加到我的index.html 中

    我有如下的 webpack config js var path require path var webpack require webpack var HtmlWebpackPlugin require html webpack plu
  • Angular,如何从字符串解析模板并传递当前上下文变量

    我制作了一个简单的组件来创建表 Component selector admin table template table class table table bordered thead th column label th thead
  • 如何在 if 语句中使用 grep?

    我有以下命令可以给出正确的结果 grep include java Ri System loadLibrary 但是 如果我将它放在 if 条件中 无论字符串是否存在 它总是返回相同的 0 结果 if grep include java R
  • 如何取消引用已传递给子例程的 Perl 哈希引用?

    我仍在尝试解决我的哈希取消引用问题 我当前的问题是我现在将 hashref 传递给子组件 并且我想在该子组件中取消引用它 但我没有找到正确的方法 语法来做到这一点 在 sub 中 我想迭代哈希键 但 hashref 的语法与哈希不同 我知道
  • Java:需要从字节数组创建 PDF

    我从 DB2 表中得到了 blob 我正在将其转换为字节数组 以便我可以使用它 我需要获取字节数组并创建一个PDF出来了 这就是我所拥有的 static void byteArrayToFile byte bArray try Create
  • 哪些列表可以作为临时列表?

    当处理项目列表时 列表仅充当暂时的容器 您建议我使用哪些列表类型 I 不想手动销毁列表 想要使用built in列表类型 无框架 库 想要仿制药 可以在不导致泄漏的情况下实现这一点的东西 function GetListWithItems
  • 使用ionic安装和卸载cordova应用程序时执行脚本

    我使用 cordova 已经有好几年了 使用 ionic 的时间还不到一年 我正在寻找在安装应用程序和卸载应用程序时运行 JavaScript 函数的方法 我做了很多搜索 但没有找到任何相关内容 有人有一个想法 至少有一个近似值可以作为起点
  • 让menhir将用户定义的函数从.mly添加到.mli

    Menhir 允许将任意 ocaml 代码添加到 mly 文件的末尾 我想在其中声明一些函数 但我找不到一种方法让 menhir 将我的函数添加到 mli 文件中 以便它们从其他模块中可见 是否可以 答案很简单 那就是no 中定义的代码 m
  • 解决导航属性 Dynamics WebAPI 深度插入时出现的错误

    我正在使用微软动态Web API https msdn microsoft com en us library mt607689 aspx将数据写入 Microsoft Dynamics 365 中的实体 当我尝试执行深插入 https m
  • 用于 Angular.js 依赖注入管理的 Grunt.js

    我正在使用 Grunt 自动构建我的网络应用程序 我遇到了一个有趣的问题 我有两个选择 1 grunt dev and 2 grunt build grunt dev只执行与开发相关的基本任务 我的 主要 Angular 模块如下所示 va
  • Py_None 的值

    我很清楚None用于表示缺乏价值 但由于在实现过程中一切都必须有一个潜在的价值 所以我想看看使用了什么值来表示没有值 关于CPython 我理解 基于文档 https docs python org 3 c api none html c