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

时间:2014-10-17 01:14:41

标签: python python-2.7

del语句有很多实际用途可以删除属性等(参见When is del useful in python?和其他),但它也可以用来取消绑定局部变量:

 def test():
    x = ...
    del x

这有什么实际用例吗?

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

修改

这有点失控。我期待一个像

这样的答案

"当然你需要del x!你无法做到......否则,呃!"

我认为现在可以说没有这样的答案。如果有用途,那么它们就是编码风格相关且有争议的问题。

我试图避免一种观点'通过在问题中直接反对最常见的问题进行讨论,显然没有成功......

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

由于其他人都有自己的意见,让我自己添加:

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

1 个答案:

答案 0 :(得分:0)

我认为你在问题中解雇的案例是一个有效的地方,在语义上使用del更有意义。

还有其他地方无法简单地替换del。例如

删除列表中的每个第二个元素

>>> a = range(10)
>>> del a[::2]
>>> a
[1, 3, 5, 7, 9]
相关问题