猿问

del什么时候在python中有用?

del什么时候在python中有用?

我真的想不出为什么python需要del关键字(而且大多数语言似乎没有类似的关键字)。例如,与其删除变量,不如只分配None敬它。当从字典中删除时,del方法可以添加。

有什么理由del在python中,还是Python垃圾前收集时代的遗迹?


江户川乱折腾
浏览 948回答 3
3回答

暮色呼如

首先,除了局部变量之外,您还可以建立其他模型。del list_item[4]del dictionary["alpha"]这两者显然都是有用的。其次,使用del在局部变量上,意图更加清晰。比较:del foo到foo = None我知道在.的情况下del foo目的是从作用域中删除变量。还不清楚foo = None就是这么做。如果有人刚刚foo = None我可能认为是死代码。但我马上就知道del foo想要做的事。

繁星淼淼

有一部分是什么del做(从)Python语言引用):删除名称将从本地或全局命名空间中删除该名称的绑定。分配None不能从名称空间中移除名称的绑定。(我想可能会有一些争论,关于移除名称绑定是否实际上是有用但这是另一个问题。

慕斯709654

有一个具体的例子说明您应该在什么时候使用del(也许还有其他人,但我知道这件事是随手发生的)当你使用的时候sys.exc_info()检查异常。此函数返回元组、引发的异常类型、消息和回溯。前两个值通常足以诊断错误并对其进行操作,但第三个值包含引发异常和捕获异常之间的整个调用堆栈。特别是,如果你做了这样的事情try:     do_evil()except:     exc_type, exc_value, tb = sys.exc_info()     if something(exc_value):         raise回溯,tb在调用堆栈的局部变量中结束,创建一个不能被垃圾收集的循环引用。因此,重要的是:try:     do_evil()except:     exc_type, exc_value, tb = sys.exc_info()     del tb    if something(exc_value):         raise若要打破循环引用,请执行以下操作。在许多情况下,您会想要调用sys.exc_info(),就像元类魔法,回溯是很有用,所以您必须确保在可能离开异常处理程序之前清理它。如果您不需要追溯,您应该立即删除它,或者只执行以下操作:exc_type, exc_value = sys.exc_info()[:2]一起避免这一切。
随时随地看视频慕课网APP

相关分类

Python
我要回答