del 语句与调用 __delitem__ 总是 100% 相同吗?

2024-02-13

a= something iterable object in python
del a[1]

Is del a[1]总是一样a.__delitem__(1)?

是Python吗del语句定义为调用__delitem__ method?


The del陈述 https://docs.python.org/3/reference/simple_stmts.html#the-del-statement适用于任何目标清单 https://docs.python.org/3/reference/simple_stmts.html#grammar-token-target_list,其中包括订阅(del spam[1]) 和切片 (del spam[:3]),还有归因(del spam.eggs)和标识符(del spam)。它在每种情况下都会做不同的事情。

该声明的文档可能并不能很好地解释每个案例的工作原理,但是数据模型 https://docs.python.org/3/reference/datamodel.html#object.__delitem__本章填补了一些空白。


__delitem__(self, key) https://docs.python.org/3/reference/datamodel.html#object.__delitem__:

调用执行删除self[key].

当然,这包括切片;如果你del spam[:3],它会调用spam.__delitem__(slice(None, 3)).


__delattr__(self, name) https://docs.python.org/3/reference/datamodel.html#object.__delattr__:

Like __setattr__()但用于属性删除而不是赋值。仅应在以下情况下实施:del obj.name对于对象来说是有意义的。


理论上,一个__getattribute__ https://docs.python.org/3/reference/datamodel.html#object.__getattribute__在类或元类上可以重新路由这些调用。但是由于这两个调用都是通过特殊方法查找 https://docs.python.org/3/reference/datamodel.html#special-lookup,Python 可以直接查找方法,并且至少在 CPython 3.7 和 2.7 中是这样。所以,__delitem__ or __delattr__总会被调用。


For identifiers, what happens depends on whether the compiler identifies the variable as a local, nonlocal, or global. This uses the same rules as any other variable reference.1

对于全局变量来说,这实际上意味着del globals()['spam']。对于当地人来说,这有点像del locals()['spam'],除了它实际上影响当地环境。对于非本地人来说,它本质上称为delete_contents()作用于闭合单元。


It may help to use the dis https://docs.python.org/3/library/dis.html module to see how CPython compiles the different forms of the del statement, and then look up what each of the bytecodes does.2 Of course that's specific to CPython, but it demonstrates what any Python implementation needs to do, however it chooses to do it.


1. But notice that deletion counts as a binding operation, just like assignment does. So, unless spam is declared global or nonlocal (or the code is at the top level), del spam is going to make spam local.

2. Then again, if you don't know anything about bytecode, fast locals, etc., it probably won't help very much…

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

del 语句与调用 __delitem__ 总是 100% 相同吗? 的相关文章

  • 将 yerr/xerr 绘制为阴影区域而不是误差线

    在 matplotlib 中 如何将误差绘制为阴影区域而不是误差条 例如 而不是 忽略示例图中各点之间的平滑插值 这需要进行一些手动插值 或者只是获得更高分辨率的数据 您可以使用pyplot fill between https matpl
  • 如何使用 python 的 http.client 准确读取一个响应块?

    Using http client在 Python 3 3 或任何其他内置 python HTTP 客户端库 中 如何一次读取一个分块 HTTP 响应一个 HTTP 块 我正在扩展现有的测试装置 使用 python 编写 http clie
  • 如何在python中附加两个字节?

    说你有b x04 and b x00 你如何将它们组合起来b x0400 使用Python 3 gt gt gt a b x04 gt gt gt b b x00 gt gt gt a b b x04 x00
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • 以类型化内存视图作为成员的结构定义

    目前我正在尝试让一个具有类型化内存视图的结构能够工作 例如 ctypedef struct node unsigned int inds 如果 inds 不是内存视图 据我所知 它可以完美地工作 然而 通过内存视图并使用类似的东西 def
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • 如何在单元测试中模拟 subprocess.call

    我使用的是 python 3 3 我必须测试一个使用的方法call来自 subprocess py I tried subprocess call MagicMock with patch subprocess call as TU cal
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • ModuleNotFoundError:没有名为“bs4”的模块

    当我尝试像这样导入 BeautifulSoup 时 from bs4 import BeautifulSoup 当我运行我的代码时 我收到此错误消息 ModuleNotFoundError No module named bs4 如果有人知
  • 为什么这个 if 语句会导致语法错误

    我正在尝试设置一个 elif 语句 如果用户按下 Enter 键 代码将继续 但是我不断遇到语法错误 GTIN 0 while True try GTIN int input input your gtin 8 number if len
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • numpy polyfit 中使用的权重值是多少以及拟合误差是多少

    我正在尝试对 numpy 中的某些数据进行线性拟合 Ex 其中 w 是该值的样本数 即对于点 x 0 y 0 我只有 1 个测量值 该测量值是2 2 但对于这一点 1 1 我有 2 个测量值 值为3 5 x np array 0 1 2 3
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • 如何在 scikit 中加载 CSV 数据并将其用于朴素贝叶斯分类

    尝试加载自定义数据以在 Scikit 中执行 NB 分类 需要帮助将示例数据加载到 Scikit 中 然后执行 NB 如何加载目标的分类值 使用相同的数据进行训练和测试 或使用完整的数据集进行测试 Sl No Member ID Membe
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i

随机推荐

  • Twitter API:如何仅搜索带有地理标记的推文

    我该如何使用Twitter Search API 或其他 获取具有以下内容的推文列表 geo param EDIT 举例来说 我不会通过 apple 标签获取地理标记推文列表 没有位置过滤器 全球范围内 看起来最新的 API 支持这一点 只
  • 如何强制输入只允许字母?

    此处使用 jQuery 但无法阻止在输入字段中输入数字 http codepen io leongaban pen owbjg http codepen io leongaban pen owbjg Input
  • Javascript 的正则表达式lookbehind 解决方法?

    我在正则表达式方面很糟糕 所以我会以尝试更好地描述我的问题的名义 以一种非常规的方式传达我的问题 var TheBadPattern d 2 d 2 d 2 d 3 var TheGoodPattern a zA Z0 9 r n n a
  • raise ValueError('Fileobj 必须实现 read')

    我正在获取文件大小并将其上传到 S3 def transfer file from ftp to s3 bucket name ftp file path s3 file path ftp username ftp password chu
  • AVAssetWriter 仅在 iOS 13 设备上有音频“爆裂声”

    我使用 AVCaptureSession 使用 AVAssetWriter 写入 mov 文件 同样的代码在 iOS 13 之前的设备上不会出现裂纹 在所有 iOS 13 设备上 无论 iPhone iPad 型号如何 都会出现爆裂声 我已
  • Eigen SparseMatrix 的零拷贝构造

    我有以下问题 我有一个Eigen SparseMatrix我需要通过网络发送 而我的网络库仅支持发送原始类型的数组 我可以通过执行类似的操作来检索指向 SparseMatrix 的支持数组的指针 这是支持对象的代码 https eigen
  • extjs 5:为组件的自定义属性进行数据绑定

    我有一个从文件字段扩展的组件 我向其中添加了一个自定义属性 serverPath 并且我还定义了 getter 和 setter 代码 Ext define MyApp ux Field File extend Ext form field
  • 是否可以使用 Node.js 创建桌面应用程序? [复制]

    这个问题在这里已经有答案了 我已经使用node js 创建了一个应用程序 我很想知道是否可以将客户端 js html css 和服务器端打包到一个独立的应用程序 不需要浏览器 中 https github com rogerwang nod
  • 如何使用 vc++ 找出当前线程的堆栈上剩余多少空间?

    我使用的是VC 2012 我希望能够知道当前线程中有多少堆栈内存可用 快速搜索指向使用 malloc h 和 stackavail 函数 但它在 Visual C 2012 中不存在 我如何以另一种方式实现这一点 有问题的例子是这样的 in
  • 在“in”子句的存储过程中使用MySQL用户定义变量

    当将逗号分隔的 id 字符串作为 varchar 发送到 MySQL 存储过程时 我无法使用该字符串作为 IN 子句的一部分来返回正确的结果 该字符串被截断为小数 并且仅使用第一个值 我以为我可以通过准备然后执行该语句来解决这个问题 但这仍
  • 如何(从命令行)自动安装适用于 C++、.NET、C# 等的 Visual Studio 构建工具构建环境

    注 我已经读过如何在不安装 IDE 的情况下在构建服务器上安装 VS2017 版本的 msbuild https stackoverflow com questions 42696948 how can i install the vs20
  • 未选中复选框时如何删除相邻单元格的数据?

    我想以此作为序言 因为我没有接受过这一专业领域的培训 因此我帮助设置了该表的初始代码 我设置了工作表 以便在 A 列和 C 列中添加复选框 并在 B 和 D 中添加时间戳 但我也希望这样 如果需要取消选中复选框 则数据将被删除 A B C
  • 如何从 Django 的会话中获取登录用户的 uid?

    我已经使用以下方法实现了注册 登录 身份验证系统这个 Django 指南 https docs djangoproject com en 1 3 topics auth 但是 我如何从我的视图访问用户的信息 以便将用户的信息发送到模板文件
  • 简单的客户端/服务器、TCP/IP 加密消息流、SSL

    编写一个小型 TCP IP 客户端服务器应用程序 基本上它会创建一个服务器 然后您可以创建几个不同的客户端并设置一些聊天会话 我想知道是否有任何方法可以使用标准 net 库合并某种形式的加密 m mainSocket new Socket
  • 从 HTTPS 页面到 HTTP URL 的 AJAX 请求

    我有一种情况 我需要从一个 HTTPS 页面到另一个不安全的页面 在不同的域上 执行 AJAX 请求 我们已经实施了 CORS 策略 并且在我们的网站上使用 HTTPS 之前它运行良好 有什么办法可以让这个工作吗 根据 W3 的说法 由于
  • 将文件和目录连同提交历史记录一起移动到子目录中

    如何将目录和文件以及提交历史记录移动到子目录 例如 源码目录结构 project x files sub dirs 目标目录结构 project x p q files sub dirs 要添加到布马古利斯 https stackoverf
  • .Net lib来控制远程GDB [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 您可以对遗留代码库做哪些对提高质量影响最大的事情?

    当您在遗留代码库中工作时 随着时间的推移 什么会对提高代码库的质量产生最大的影响 删除未使用的代码 删除重复的代码 添加单元测试以提高覆盖率较低的测试覆盖率 跨文件创建一致的格式 更新第三方软件 减少静态分析工具 即 Findbugs 生成
  • 具有 CSS 和 HTML 的水平家谱 - 反向

    我在网上搜索并找到了一个很好的家谱示例在代码笔这里 http codepen io anon pen bdLeNe 我想要同样的东西 但旋转了180度 我想以 16 名成员开始我的家谱 并从左到右降序 16 8 4 2 1 如何通过使用 编
  • del 语句与调用 __delitem__ 总是 100% 相同吗?

    a something iterable object in python del a 1 Is del a 1 总是一样a delitem 1 是Python吗del语句定义为调用 delitem method The del陈述 htt