python - 如何在 Eclipse/PyDev 中抑制 "unused variable"警告

标签 python eclipse variable-assignment pydev

如何在 Eclipse/PyDev 中抑制“未使用的变量”警告

当我使用返回元组的函数时,我通常只需要其中一个值,但仍想分配给多个变量。我希望能够暂时关闭此警告,以便在更严重的问题上归零。然后,我可以在进行更多最终检查时将其重新打开。

如果您想知道我为什么要故意这样做,那只是为了便于阅读。假设一个函数返回一个元组的元组,我的代码的几个部分可能会像这样使用第三个值:

label, content = myfunc()[2]

有时,我可能只对“内容”部分感兴趣,但我发现...

tmp, content = myfunc()[2]

...比这更并行(因此更具可读性):

content = myfunc()[2][1]

如果有更好的方法来做到这一点,而无需分配给一次性未使用的变量,请随时提供作为答案。

>>> myfunc()[2]
('lab', 'val')
>>> , v = myfunc()[2]
SyntaxError: invalid syntax
>>> tmp, v = myfunc()[2]
>>> 

最佳答案

如果您不需要变量的值,请将其分配给特殊变量_

就Python而言,_其实并没有什么特别之处;它只是另一个合法的标识符名称。

但是,对于大多数“lint”风格的工具(希望包括 PyDev)——更重要的是,人类读者——它具有特殊含义:“我不需要这个变量,我只是在这里放一些东西,因为API/语法/任何需要它的东西”。这意味着他们不会警告您不使用它。

所以:

_, content = myfunc()[2]

是的,你说得对,这通常比 myfunc()[2][1] 更具可读性。不仅如此,它还可以帮助您捕获更多错误——如果 myfunc()[2] 没有恰好两个成员,则元组赋值将抛出,但 [1] 不会。

非常非常少,这不是一个好主意,因为该值是您希望尽快被垃圾收集的东西,并将其绑定(bind)到 _ 而不是仅仅在所有(例如,通过 [2][1])都会延迟。

更严重的是,这确实与也特别使用 _ 的不同习语相冲突:使用 gettext 进行国际化的代码通常会:

import gettext
_ = gettext.gettext

或者,等效地:

from gettext import gettext as _

显然,您不能将 _ 用作 gettext 快捷方式和无意义的标识符。 (实际上你可以侥幸逃脱,因为 gettext 的含义是在模块全局级别绑定(bind)的,无意义的标识符只能在函数体内部使用……但仍然,尝试这是一个非常糟糕的主意,因为在某些时候,在您分配了一个隐藏它的本地值之后,您最终会在函数中使用 gettext _。)在这两种情况下都没有强制您使用 _ ——但是如果您使用其他任何东西,您可能会混淆读者(并且可能是您最初希望安抚的同一个 linting 工具)。因此,您必须决定在任何给定项目中哪个对您更重要。 (通常,如果您使用 gettext,那将是更重要的一个。)

如果您重复调用 myfunc 并处理一些值,您可能需要考虑编写一个包装函数:

def mywrapperfunc():
    _, content = myfunc()[2]
    return content

那么你的代码就可以了:

content = mywrapperfunc()

这有很多优点:

  • 它显然比任何需要你记住你想要一个元组的后半部分的东西更容易阅读,它位于 myfunc 返回的序列的索引 2 中。
  • 它为您提供了一个放置好名字(希望比 mywrapperfunc 更好)和/或注释/文档字符串的地方,以防万一。
  • 这意味着如果您稍后更改 myfunc 以便您想要的值现在在索引 3 而不是 2 中,并且是 3 元素元组的第二个成员而不是 2 元素元组,您只需要更改 mywrapperfunc 而不是 20 行不同的代码。
  • 这也意味着如果你以后想使用一个有冲突的 _ 成语(例如,用 gettext 来 i18n 你的代码),你只需要在一个地点。

附注:在交互式解释器中,_ 确实有一个特殊的含义:它绑定(bind)到最后一个交互式命令的结果。但这并不意味着您不能在交互式解释器中使用 _。 (事实上​​,那里更好,因为你存储在那里的任何东西都会立即被覆盖,所以不会出现非常罕见的 GC 问题。)

关于python - 如何在 Eclipse/PyDev 中抑制 "unused variable"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944234/

相关文章:

javascript - JavaScript 对象属性可以引用同一对象的另一个属性吗?

Python 转义 URL

python - 来自 json 输出的 python 中的变量赋值(通配符)

java - Eclipse 自定义 java 编译器

java - MyEclipse 不会将 jars 部署到 WEB-INF/lib 目录中

c++ - 变量返回类型

python - Numpy:设置 false 左边的任何东西都是假的

python - Django 中的 get_or_create 函数如何返回两个值?

java - 在 eclipse 中设置测试输入

javascript - 在 JavaScript 中调用赋值函数