【问题标题】:Unused variable naming in python [duplicate]python中未使用的变量命名[重复]
【发布时间】:2012-07-14 18:07:34
【问题描述】:

可能重复:
How can I get around declaring an unused variable in a for loop?

在 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 最佳实践..

【问题讨论】:

  • 我个人会在不使用key 的情况下使用for key, value in some_stuff:。无论如何,它可以在将来使用。变量应该告诉它包含什么。变量不应该说我不希望被使用

标签: python variables


【解决方案1】:

不确定这是否是 Eclipse 的事情,但我通常使用 '_' 来表示我不关心的值(即,元组中的返回值,或 for-loops 中的索引值)。

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

我不确定PEP 8 是否提到过这方面的任何内容,可能值得一看。

【讨论】:

  • 是的,我快速浏览了 PEP-8,但其中没有提到该主题。
  • @TomHennigan 我也看了看,尤其是这部分,naming conventions,但也没有看到任何东西。
  • 请记住 python 在 shell 中使用 '_' 作为一个魔术变量......被翻译的字符串也很常见标记为_("some string")
  • @Levon 看这里:docs.python.org/library/gettext.html@dimo414 你对翻译是正确的,但是python shell 使用它来存储最后一个值,例如>>>5+3\n>>>print _ 会打印 8
  • 只要您不使用 shell 或使用 '_' 作为 ignore_me 类型变量的翻译,所有这些都是非常常见且绝对可以的(即使您使用翻译,您也可以将其映射到别的东西,_只是约定)
【解决方案2】:

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

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

一些参考资料:

【讨论】:

  • 其实_只有一种用法表示未使用变量。另一个使用的解释是 最后使用的值 在某些构造中,或带有最后操作结果的变量的隐式名称。所以,意见不同,不应该被普遍用于目的。
  • 在交互式 Python shell 中,_ 为方便起见用作最后使用的值。在 Python 脚本中,this is not the case。不能依赖它在所有情况下都提供该功能,但它可以并且按照惯例,在整个 Python 中用于明确表示“我不关心此变量的当前值”。
【解决方案3】:

让我们开始吧……

>>> 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 用户,但如果您以前从未见过 _ 对您意味着什么?

【讨论】:

  • 这是一种有趣的表达方式,我倾向于同意。我猜至少当 python 新手来到你的代码并通读时,如果变量只是被称为 key,他们不会跳到谷歌上寻找 _ 在 python 中的特殊含义。
  • 你说得对,我并不关心 Perl 用户。
【解决方案4】:

_1

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

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

【讨论】:

  • 是局部变量(例如在函数或循环中)或只是实例变量的常用变量,您想在其中修改名称以实现半私有性?除了实例变量之外,我认为我没有看到它在任何地方使用过。
  • 没有。它通常不用于局部变量,因为 __ 是为了表示一些特殊的东西。当函数返回时,函数、循环等中的变量将被垃圾收集,因此无需担心。最好在没有 _ 修饰符/标志的情况下给出有意义的名称
  • -1。 __ 前缀用于名称修改。将它用于其他任何事情对 python 来说都不是好习惯。 _ 前缀的意思是“请不要碰这个”——惯例是,如果你在类之外依赖这些属性,你就有可能会破坏。
  • @Daenyth -1...真的。我以为我已经说过了。不过,有时我不是一个很好说话的人。
  • 当前文本暗示它可以/应该用于 OOP“私有”,这是一个常见的错误。它用于避免名称冲突并将变量绑定到一个特定的类名。
猜你喜欢
  • 2021-04-29
  • 2017-06-10
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2013-04-10
相关资源
最近更新 更多