在Python中,是使用`del`语句代码的味道?

时间:2010-12-24 21:28:40

标签: python del

每当我处理原型脚本时,我倾向于使用它,并且:

  1. 使用某种常见变量(例如fileCount)和
  2. 有一个大方法(20多行)和
  3. 不要使用类或名称空间。
  4. 在这种情况下,为了避免潜在的变量冲突,我会在完成后立即删除bugger。我知道,在生产代码中我应该避免使用1.,2。和3.,但是从原型工作到完全抛光的类是非常耗时的。有时我可能想要解决一个次优,快速的重构工作。在这种情况下,我发现保持del语句很方便。我是否养成了不必要的坏习惯? del完全可以避免吗?什么时候会是一件好事?

2 个答案:

答案 0 :(得分:23)

我不认为del本身就是代码气味。

在同一名称空间中重用变量名称肯定是代码味道,因为在适当的情况下不使用类和其他名称空间。所以使用del来促进那种事情就是代码味道。

我能想到的唯一合适的del用法是打破循环引用,这通常也是代码味道(通常情况下,这甚至不是必需的)。请记住,所有del都会删除对象的引用而不是对象本身。这将通过引用计数或垃圾收集来处理。

>>> a = [1, 2]
>>> b = a
>>> del a
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> b
[1, 2]

您可以看到del语句后列表保持活动状态,因为b仍然保留对它的引用。

所以,虽然del并不是真正的代码气味,但它可以与之相关联。

答案 1 :(得分:7)

除非在特殊情况下,任何在函数,类和方法中组织良好的代码都不需要del。旨在通过使用更多功能和方法从一开始就构建您的应用程序,避免重用变量名称等。

使用del语句是可以的 - 它不会带来任何麻烦,当我使用Python作为我系统上的shell脚本的替代品时,我经常使用它,当我正在编写脚本时实验。但是,如果它经常出现在真实的应用程序或库中,则表明某些东西不是很好,可能是结构严重的代码。我从来没有在应用程序中使用它,并且很少看到它在已发布的代码上的任何地方使用过。