python - `del x` 在 Python 中有用吗?

标签 python python-2.7

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question



del语句在删除属性等方面有许多实际用途(参见 When is del useful in python? 和其他),但它也可用于解除局部变量的绑定(bind):

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

是否有任何实际用例?

我想到了垃圾收集,但 x=None应该有同样的效果。我也听说过“导入后清理”的原因,但是 from ... import ...这样做更好。 “Cleaner code”也弹出来了,但是看不懂del可以使代码更干净(至少对于无论如何都不需要重构的代码而言)。

编辑:

这有点失控了。我期待一个答案,例如

“当然你需要del x!否则你不能做......否则,呃!”

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

我试图通过直接反驳问题中最常见的讨论来避免“意见”讨论,显然这行不通......

我只是很好奇为什么 Python 具有此功能,并认为可能有一些最佳实践可供我学习。

由于其他人都有自己的意见,让我补充一下自己的意见:

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

最佳答案

我认为您在问题中驳回的情况是一个有效的地方,在语义上使用 del 更有意义。 .

还有其他地方del不能简单地更换。例如。

删除列表的第二个元素

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

关于python - `del x` 在 Python 中有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26416419/

相关文章:

python - python 日志文件中的 "None"

python - BlueZ DBUS API - GATT 接口(interface)对 BLE 设备不可用

windows - 如何在 Windows 上安装 Poppler?

python - 两个列表中对应的float

python - 将螺旋图代码改写为函数

python - 将 optparse 输入插入函数调用

PythonQt 不打印任何东西

python - 在 Python 中使用 XML 模式进行验证

python - 如何在Linux命令中使用Python

python - MySQLdb Python 更新匹配行与更改行