Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python del语句是否总是100%与调用_udelitem_u相同?_Python_Python 3.x - Fatal编程技术网

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)
相同

Python
del
语句是否定义为调用
\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]