Python del语句是否总是100%与调用_udelitem_u相同?
Python del语句是否总是100%与调用_udelitem_u相同?,python,python-3.x,Python,Python 3.x,dela[1]是否总是与a.\u delitem\u(1)相同 Pythondel语句是否定义为调用\u delitem\u方法?适用于任何对象,包括订阅(del spam[1])和slicings(del spam[:3]),以及属性(del spam.egs)和标识符(del spam)。在每种情况下,它都会做不同的事情 该声明的文档可能无法很好地解释这些案例是如何工作的,但本章填补了一些空白 : 调用以实现删除self[key] 当然,这包括滑动;如果您del spam[:3],它将调用
dela[1]
是否总是与a.\u delitem\u(1)
相同
Pythondel
语句是否定义为调用\u delitem\u
方法?适用于任何对象,包括订阅(del spam[1]
)和slicings(del spam[:3]
),以及属性(del spam.egs
)和标识符(del spam
)。在每种情况下,它都会做不同的事情
该声明的文档可能无法很好地解释这些案例是如何工作的,但本章填补了一些空白
: 调用以实现删除
self[key]
当然,这包括滑动;如果您del spam[:3]
,它将调用spam.\uu delitem\uuuu(slice(None,3))
: 类似于
\uuuu setattr\uuuuu()
,但用于属性删除而不是赋值。仅当对象的del obj.name
有意义时,才应执行此操作
理论上,类或元类上的调用可以重新路由这些调用。但由于这两个调用都是通过进行的,因此Python可以直接查找方法,至少在CPython 3.7和2.7中是这样。因此,将始终调用
\uuu delitem\uuu
或\uu delattr\uuu
对于标识符,发生的情况取决于编译器是将变量标识为局部、非局部还是全局变量。这使用与任何其他变量引用相同的规则。1 对于globals,这实际上意味着
delglobals()['spam']
。对于本地人来说,它有点像del locals()['spam']
,只是它实际上会影响本地环境。对于非局部变量,它本质上调用闭包单元格上的delete\u contents()
函数
使用该模块可以查看CPython如何编译不同形式的
del
语句,然后查看每个字节码的作用。2当然,这是特定于CPython的,但它演示了任何Python实现需要做什么,不管它选择做什么
一,。但请注意,删除也算作绑定操作,就像赋值一样。因此,除非
spam
被声明为global
或nonlocal
(或代码处于顶层),del spam
将使spam
成为local
二,。再说一次,如果你对字节码、快速本地码等一无所知,它可能不会有多大帮助……对任何东西都有效,包括订阅(del spam[1]
)和slicing(del spam[:3]
),还有属性(del spam.egs
)和标识符(del spam
)。在每种情况下,它都会做不同的事情
该声明的文档可能无法很好地解释这些案例是如何工作的,但本章填补了一些空白
: 调用以实现删除
self[key]
当然,这包括滑动;如果您del spam[:3]
,它将调用spam.\uu delitem\uuuu(slice(None,3))
: 类似于
\uuuu setattr\uuuuu()
,但用于属性删除而不是赋值。仅当对象的del obj.name
有意义时,才应执行此操作
理论上,类或元类上的调用可以重新路由这些调用。但由于这两个调用都是通过进行的,因此Python可以直接查找方法,至少在CPython 3.7和2.7中是这样。因此,将始终调用
\uuu delitem\uuu
或\uu delattr\uuu
对于标识符,发生的情况取决于编译器是将变量标识为局部、非局部还是全局变量。这使用与任何其他变量引用相同的规则。1 对于globals,这实际上意味着
delglobals()['spam']
。对于本地人来说,它有点像del locals()['spam']
,只是它实际上会影响本地环境。对于非局部变量,它本质上调用闭包单元格上的delete\u contents()
函数
使用该模块可以查看CPython如何编译不同形式的
del
语句,然后查看每个字节码的作用。2当然,这是特定于CPython的,但它演示了任何Python实现需要做什么,不管它选择做什么
一,。但请注意,删除也算作绑定操作,就像赋值一样。因此,除非
spam
被声明为global
或nonlocal
(或代码处于顶层),del spam
将使spam
成为local
二,。再说一次,如果你对字节码、快速本地码等一无所知,这可能不会有多大帮助……有用的链接:谢谢你的回复。但我已经读过了,仍然感到困惑。另一方面:。基本上,是的,但仅当使用
del obj[key]
时。请注意,del obj
不直接调用。那么,del
语句也可以用于属性、全局和局部,而不仅仅是项del spam.eggs
是对spam.\uu delattr(“eggs”)
的调用,del spam
编译的内容取决于它是本地的、非本地的还是全局的/内置的/未知的。有用的链接:谢谢回复。但我已经读过了,仍然感到困惑。另一方面:。基本上,是的,但仅当使用del obj[key]
时。请注意,del obj
不直接调用。那么,del
语句也可以用于属性、全局和局部,而不仅仅是项del spam.eggs
是对spam.\uu delattr(“eggs”)
的调用,del spam
编译的内容取决于它是本地、非本地还是全局/内置/未知。
a= something iterable object in python
del a[1]