为了账号安全,请及时绑定邮箱和手机立即绑定

del什么时候在python中有用?

del什么时候在python中有用?

江户川乱折腾 2019-07-15 09:51:12
del什么时候在python中有用?我真的想不出为什么python需要del关键字(而且大多数语言似乎没有类似的关键字)。例如,与其删除变量,不如只分配None敬它。当从字典中删除时,del方法可以添加。有什么理由del在python中,还是Python垃圾前收集时代的遗迹?
查看完整描述

3 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

首先,除了局部变量之外,您还可以建立其他模型。

del list_item[4]del dictionary["alpha"]

这两者显然都是有用的。其次,使用del在局部变量上,意图更加清晰。比较:

del foo

foo = None

我知道在.的情况下del foo目的是从作用域中删除变量。还不清楚foo = None就是这么做。如果有人刚刚foo = None我可能认为是死代码。但我马上就知道del foo想要做的事。


查看完整回答
反对 回复 2019-07-15
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

有一部分是什么del做(从)Python语言引用):

删除名称将从本地或全局命名空间中删除该名称的绑定。

分配None不能从名称空间中移除名称的绑定。

(我想可能会有一些争论,关于移除名称绑定是否实际上是有用但这是另一个问题。


查看完整回答
反对 回复 2019-07-15
?
慕斯709654

TA贡献1840条经验 获得超5个赞

有一个具体的例子说明您应该在什么时候使用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]

一起避免这一切。


查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 947 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信