`del x`在Python中是否有用?

Ste*_*fan 7 python python-2.7

del语句有许多实际用途来删除属性等(参见什么时候在python中有用?等等),但它也可以用来取消绑定局部变量:

 def test():
    x = ...
    del x
Run Code Online (Sandbox Code Playgroud)

这有什么实际用例吗?

想到垃圾收集,但x=None应该具有相同的效果.我也听说"导入后清理"是一个原因,但from ... import ...做得更好."更清洁的代码"也出现了,但我不知道如何del使代码更清晰(至少对于不需要重构的代码而言).

编辑:

这有点失控.我期待一个像这样的答案

"当然你需要del x!你做不到......不然,不管怎样,呃!"

我想现在可以说没有这样的答案.如果有用途,那么它们的编码风格相关并且"有争议".

我试图通过在问题中直接反击最常见的问题来避免"意见"的讨论,显然这不起作用......

我只是好奇为什么Python有这个功能,并认为可能有一些最好的实践让我学习.

既然其他人都有他们的意见,那么让我自己加一点:

我建议不要解除局部变量的绑定.经验不足的Python程序员(特别是那些具有C++背景的程序员)很可能会被解读del xdelete the object referenced by x.他们经常把它del x当作捷径x.__del__().许多人__del__经常使用它们.我多次看到这种误解.它最糟糕的是它最初适用于它们!使用简单的代码,对象只从该变量引用,CPython的行为就像他们认为的那样.因此,初学者会对他们的误解得到积极的强化,并开始越来越频繁地使用它,最终导致大量的错误代码和他们不理解的怪异行为.

Joh*_*ooy 0

我认为您在问题中驳回的案例是一个有效的地方,从语义上讲,使用del.

还有一些地方是del不能简单替换的。例如。

删除列表中每隔一个的元素

>>> a = range(10)
>>> del a[::2]
>>> a
[1, 3, 5, 7, 9]
Run Code Online (Sandbox Code Playgroud)

  • 该问题特别要求使用删除*变量*(`del x`),而不是从聚合中删除,这已被链接的其他问题OP充分涵盖。 (2认同)