38

可能重复:
我怎样才能绕过在 for 循环中声明未使用的变量?

在 Python 中,命名不会使用的变量的最佳做法是什么?这肯定是一个奇怪的问题,但对于我的具体情况,我有一个 (key, value) 的元组,我只对值感兴趣。我的用例的基本演示:

some_stuff = [("key", "value"), ("key2", "value")]
for _, value in some_stuff:
    pass  # TODO: do something really important with value

我在 Eclipse 中注意到,命名变量 _ 或带有 _ 前缀(例如 _k)不会显示未使用的变量警告,删除 _ 前缀会导致引发警告,但这可能只是一个奇怪/“功能”在 Eclipse 而不是 Python 最佳实践中..

4

4 回答 4

34

不确定这是否是 Eclipse 的东西,但我通常'_'用来表示我不关心的值(即,元组中的返回值,或循环中的索引值for)。

当然,您始终可以使用旧的备用方法,例如命名变量dummyignore.

我不确定PEP 8是否对此有任何提及,可能值得一看。

于 2012-07-14T18:12:22.900 回答
19

这是一个 Python 编码约定,是的。最佳实践是_在您不关心设置的值的地方使用,例如从 tuple 解包值时。然而,有时,需要这表明您可能正在以非 Python 的方式做其他事情。

_作为前缀用于表示“私有”方法和变量,就像 Phil Cooper 所说的那样。使用它来表示这些方法不是其他模块可以或应该依赖的任何公共合同的一部分。

一些参考资料:

于 2012-07-14T18:21:02.590 回答
4

让我们从...

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
...
Readability counts.
Special cases aren't special enough to break the rules.

我建议选择没有问题的方法。它通常意味着一些不言自明、简单易懂的东西。如果你坚持表达不使用,那么名称unuseddummy

如果可能的话,是否应该_隐蔽、隐藏甚至是被忽视的候选者?

对于 Perl 用户,这意味着未使用_的其他东西。即使您可能不关心 Perl 用户,如果您以前从未遇到过 Perl 用户,这对您意味着什么?_

于 2012-07-14T18:39:16.863 回答
2

你几乎得到了它_1

  • 一个前导下划线表示,是的,它存在,您可以查看它,但是您应该使用另一种方法或属性;查阅文档。
  • 两个前导下划线表示,危险!请勿触摸,否则会严重破坏事物的状态和稳定性。请远离;如果你搞砸了,如果出了问题,那都是你自己的错。

注意: Using__不仅仅是一个命名约定,因为它会导致name mangling。这会将变量重命名为_ClassName__var. 这使得变量/方法更难在课堂之外使用。这样做主要是为了避免继承类意外覆盖父类中的方法。

于 2012-07-14T18:12:36.487 回答