为什么namedtuple模块不使用元类来创建nt类对象?

2024-04-26

我花了一些时间调查collections.namedtuple module https://hg.python.org/cpython/file/3b920a778484/Lib/collections/__init__.py#l265几周前。该模块使用一个工厂函数来填充动态数据(新的名称)namedtuple类,以及类属性名称)转换成一个非常大的字符串。然后exec以字符串(代表代码)作为参数执行,并返回新类。

有谁知道为什么这样做,当有一个特定的工具可以随时使用这种东西时,即元类?我自己没有尝试过这样做,但似乎发生在namedtuple模块可以很容易地使用namedtuple元类,就像这样:

class namedtuple(type):

etc etc.

编辑:谦虚地建议阅读几年后我写的答案 https://stackoverflow.com/a/56633245/2437514,位于页面下方一点。


里面有一些提示问题 3974 http://bugs.python.org/issue3974。作者提出了一种创建命名元组的新方法,但被拒绝,评论如下:

看来原版的好处是速度更快, 感谢硬编码关键方法。——安托万·皮特鲁

使用 exec 并没有什么不妥之处。早期版本使用其他 方法,但事实证明它们不必要地复杂并且具有意想不到的效果 问题。命名元组的一个关键特征是它们完全是 相当于手写课。——雷蒙德·赫廷格

另外,这里是描述的一部分原本的namedtuple recipe http://code.activestate.com/recipes/500261-named-tuples/:

...配方已经发展到目前的执行风格,我们得到了所有 免费使用 Python 的高速内置参数检查。新的 构建和执行模板的风格使得 __new__ 和 __repr__ 比本配方之前的版本运行得更快、更干净。

如果您正在寻找一些替代实现:

  • 抽象基类+命名元组的混合 http://code.activestate.com/recipes/577629-namedtupleabc-abstract-base-class-mix-in-for-named/食谱由 Jan Kaliszewski 设计

  • 基于元类的实现 https://gist.github.com/aliles/1160525作者:Aaron Iles(参见他的博客文章 http://aliles.tumblr.com/post/9205886103/replacing-exec-with-metaclass-for-namedtuple)

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

为什么namedtuple模块不使用元类来创建nt类对象? 的相关文章

  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • import matplotlib.pyplot 给出 AttributeError: 'NoneType' 对象没有属性 'is_interactive'

    我尝试在 Pycharm 控制台中导入 matplotlib pyplt import matplotlib pyplot as plt 然后作为回报我得到 Traceback most recent call last File D Pr
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s

随机推荐

  • 请求头字段X-Requested

    我正在尝试访问谷歌云存储上的存储桶中的文件 我已经为存储桶设置了 CORS 配置 但当我通过 https 发出请求时 出现此错误 它适用于通过 http 发出的请求 XMLHttpRequest 无法加载 FILENAME 预检响应中的 A
  • 无限地重复可枚举

    是否存在无限重复可枚举的可枚举扩展方法 例如 给定一个返回的枚举 a b c 我想要一个返回无限重复序列的方法 a b c a b c a b c 这听起来有点像可观察 重复 http msdn microsoft com en us li
  • 如何像普通命令行程序一样从 shell 运行 sbt 主类?

    如何从 shell 运行 sbt 应用程序 以便我可以将我的应用程序作为普通的命令行程序运行 就像直接通过scala但不必设置巨大的类路径 我知道我能做到 echo hello sbt run main com foo MyMain3 ar
  • 当我在 Visual Studio 2017 的 C# 中调用方法时,是否有指向显式命名参数的快捷方式?

    在 C 中 我有一个带有许多参数的方法 我想使用所有命名参数调用该方法 VisualStudio 2017 中有执行此操作的快捷方式吗 我使用 EF6 并使用 SQL 2014 从具有 10 多个输入参数的存储过程生成方法 Method p
  • 如何将“&[email protected]”附加到 GoogleWebAuthorizationBroker

    我想将 login hint 附加到向 Google 发出的身份验证请求中 我正在使用以下代码 FileDataStore fDS new FileDataStore Logger Folder true GoogleClientSecre
  • 创建新的 SqlDataAdapter 时出现 C# InvalidOperationException

    我编写了一些代码来建立与 SQL Server 的连接 然后执行 select 过程以从 SQL Server 中的数据表中获取所有数据 但它在声明新的 SqlDataAdapter 的命令中抛出 InvalidOperationExcep
  • 如何使用 ASP.NET MVC 控制器操作将文件发送到浏览器?

    我有一个应用程序 允许我的用户上传任何类型的文件 我将其保存在服务器上的文件系统中 该应用程序只能由两个用户访问 因此我无需担心上传任何可疑文件 如何允许用户按下 MVC 表单上的按钮来请求通过浏览器发回文件并显示标准保存 打开对话框 我想
  • C# 如何获取 COM 接口的实例

    我做了很多谷歌搜索 试图找到获取 COM 接口实例的标准方法 微软在他们的文章中提供了一个例子COM 互操作第 1 部分 客户端教程 https msdn microsoft com en us library aa645736 v vs
  • WCF 绑定到 HTTPS

    我知道有很多关于此的帖子 并且我已经浏览了搜索中出现的所有帖子并实现了所提到的所有内容 我有一个 WCF Web 服务 可以在我的本地系统上使用 HTTP 运行 也可以在服务器上使用 HTTP 运行 但客户端要求这通过 HTTPS 进行 这
  • Oracle 中的重复行

    如何防止在选择查询中选择重复的行 我有一个包含以下字段的表 name type user1 user2 user3 date 我的查询要求我仅在用户在前端输入的时间为特定用户选择数据 假设用户输入 1 那么选择查询应仅检索 user1 的数
  • 使用 Rivets.js 迭代 Backbone.js 模型的集合?

    我在用着铆钉 js http rivetsjs com 对于 Backbone 项目中的两个双向数据绑定 并且希望实现迭代绑定 文档表明迭代绑定是可能的 但没有可用的示例 我正在使用一个简单的 Rails API 将 JSON 发送到客户端
  • 无法让 raycaster.intersectObjects() 从远处返回相交的对象

    我有一个包含几个随机数的散点图Sprite用作数据点的对象 我想检测鼠标指针 光标 和Sprite对象 我用来检测交叉点的设置如下 var projector new THREE Projector window addEventListe
  • Sitecore - 将网址中的“_”重写为“-”,但会出现 404

    我正在使用 Sitecore 7 5 并替换了两件事
  • 确定 SQL Server 表是否为只读

    确定给定 SQL Server 表是否为只读 由于帐户权限或数据库被标记为只读 的最佳方法是什么 for database updated for newer versions SELECT DATABASEPROPERTYEX DB NA
  • TestNG中BeforeTest和BeforeMethod有什么区别

    这两个注释都在 testNG 中的 test 之前运行 那么它们之间有什么区别 检查下面的代码和输出 import org testng annotations BeforeMethod import org testng annotati
  • -bash:!/usr/bin/env:未找到事件[重复]

    这个问题在这里已经有答案了 我在尝试将 shebang 写入 python 脚本时收到此奇怪的错误消息 echo usr bin env python gt scripts sandbox py bash usr bin env event
  • 生产构建中的 Create-React-App 代理

    我正在使用带有 Express 后端的 create react app 我的后端在端口 3001 上运行 前端在开发模式下通过端口 3000 运行 我有 proxy http localhost 3001 在我的 package json
  • 不同的 Netty 版本及其用途

    我现在使用Netty有一段时间了 但永远无法解决这个问题 一个人可以下载四个不同的版本 其中三个正在积极开发中 3 x 4 0 x 4 1 x 5 x 据我了解 3 x 适用于 JRE 1 5 而 JRE 的其他所有版本都高于此版本 我使用
  • 如何将异步函数存储在结构中并从结构实例调用它?

    我正在尝试用新的方法来实现这一目标async await句法 std future Futures 和最新版本的 Tokio 我正在使用东京0 2 0 alpha 4和铁锈1 39 0 nightly 我尝试过的不同事情包括 using B
  • 为什么namedtuple模块不使用元类来创建nt类对象?

    我花了一些时间调查collections namedtuple module https hg python org cpython file 3b920a778484 Lib collections init py l265几周前 该模块