【问题标题】:Is local variable necessary in Python comprehensions? [duplicate]Python理解中是否需要局部变量? [复制]
【发布时间】:2014-02-18 23:25:46
【问题描述】:

在 Python 3.x 中,我调用了一个函数 rand_foo(),每次调用它都会返回一些随机的东西。我希望将随机结果序列存储到列表中。我正在使用以下构造:

r = [ rand_foo() for i in range(10) ]

现在我的 PyCharm 3.0 IDE 不断发出警告:Local variable 'i' value is not used

有没有一种优雅的方法来删除不必要的变量?实际上,在某些情况下,我可以使用 itertools.repeat() 或类似 10*[value] 的东西,但是,它不能应用于我上面的示例。

【问题讨论】:

  • 我认为这是 PyCharm 中的一个错误。这种类型的表达式在 Python 代码中很常见,您不必为了避免愚蠢的警告而跳槽。

标签: python warnings list-comprehension


【解决方案1】:

未使用变量时的约定是使用下划线代替:

r = [rand_foo() for _ in range(10)]

例如:Underscore _ as variable name in Python

我相信这会抑制你的 PyCharm 警告

【讨论】:

  • +1,但有一个警告:有一些库,最值得注意的是 stdlib 中的 gettext i18n 模块,它们为 _ 提供了特殊含义,如果您使用其中一个,您的 linter(或人类读者)可能会抱怨您正在使用同名的本地来隐藏全局 _……(当然,如果您的表达式实际上是在尝试使用 gettext,你不能这样做。)
  • 那是多么可怕的选择!
  • Python gettext 模块是 C/Unix gettext 库的一个包装器,该库自 90 年代初以来一直是事实上的标准,并使用 _("string to localize") 表示字符串应该进行本地化。并且针对gettext 的perl、sh、Smalltalk 等绑定已经采用了相同的_ 语法。所以真的别无选择……
  • 正确,警告消失了!谢谢。
  • @wsysuper 如果你不关心变量,你实际上可以为它们重用下划线:r=[[rand() for _ in range(10)] for _ in range(20)]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 2019-06-05
  • 2013-08-04
  • 2018-11-04
  • 2013-03-14
  • 2013-08-02
  • 1970-01-01
相关资源
最近更新 更多