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的行为就像他们认为的那样。因此,初学者会对他们的误解得到积极的强化,并开始越来越频繁地使用它,最终导致大量的错误代码和他们不理解的奇怪行为。
答案 0 :(得分:0)
我认为你在问题中解雇的案例是一个有效的地方,在语义上使用del
更有意义。
还有其他地方无法简单地替换del
。例如
删除列表中的每个第二个元素
>>> a = range(10)
>>> del a[::2]
>>> a
[1, 3, 5, 7, 9]