【问题标题】:In python, is there a "pass" equivalent for a variable assignment在python中,变量赋值是否有“通过”等价物
【发布时间】:2023-03-20 19:33:02
【问题描述】:

我正在使用一个名为 get_count_and_price 的库函数,它返回一个 2 元组 (count,price)。在许多地方,我同时使用时间和价格。然而,在某些情况下,我只需要时间或价格。所以现在,如果我只需要计数,我分配给 (count,price) 并保留未使用的价格。

这很有效,并且本身不会造成任何麻烦。

不过……

我使用 Eclipse 和 PyDev,新版本 1.5 自动显示错误和警告。它显示的警告之一是未使用的变量。在上面的示例中,它将价格标记为未使用。这是一种很棒的行为,我非常感谢 PyDev 为我做这件事。但是,我想完全跳过对价格的分配。理想情况下,我想要这样的东西:

(count,None) = get_count_and_price()

现在我们都知道,None 不能被分配给。在这种情况下我还能做些什么吗?

我知道我可以做类似的事情

count = get_count_and_price()[0]

但我只是想看看是否有人有更好的建议。

【问题讨论】:

    标签: python core


    【解决方案1】:

    我认为使用 [0] 下标没有什么问题,但有时人们会使用“一次性”变量 _。它实际上就像任何其他变量一样(在控制台中有特殊用法),只是一些 Python 用户决定将其作为惯例“丢弃”。

    count, _  = get_count_and_price()
    

    关于 PyDev 问题,无论如何你都应该使用 [0] 下标。但是,如果您真的想使用 _,唯一的解决方案是禁用未使用的变量警告,如果这让您感到困扰。

    【讨论】:

    • 对此要谨慎。请记住,在交互式 Python 解释器中,_ 具有特殊含义,分配给它会消除这种魔力。
    • Haskell 和 Erlang 也使用 _ 作为“一次性”变量。
    • 只要你没有gettext为_()
    • 还发现了这个方便的注释/注释,这将使 PyDev 忽略具有未使用变量的行的此类警告:#@UnusedVariable
    • 由于上面提到的_问题,我通常使用双下划线(__):count, __ = get_count_and_price()
    【解决方案2】:

    我们经常这样做。

    count, _ = get_count_and_price()
    

    或者这个

    count, junk = get_count_and_price()
    

    【讨论】:

      【解决方案3】:

      如果您转到 Eclipse -> Preferences... 窗口,您实际上可以指定 PyDev 在未使用时应该忽略哪些变量名(我正在查看最新的 PyDev 1.5.X)。

      如果你去 PyDev -> Editor -> Code Analysis 并查看最后一个字段“如果名称以开头,则不要报告未使用的变量”

      在其中输入您想要的任何名称,然后使用该名称来限制 PyDev 将忽略未使用警告的变量名称。

      默认情况下,对于名称以“dummy”、“_”或“unused”开头的任何变量,PyDev 似乎会隐藏未使用的变量警告。

      正如@TokenMacGuy 下面所说,我建议不要只使用“_”,因为它在 Python 的某些场景中具有特殊含义(特别是在交互式解释器中使用)。

      【讨论】:

      • 虽然您确实对_ 在解释器中具有特殊含义提出了很好的看法,但我的印象是,它在书面代码中具有不同的特殊含义(如果只是按照惯例)已被广泛理解。
      【解决方案4】:

      使用_ 可能会出现一些问题(尽管大部分情况下都可以)。根据我们在工作中使用的 Python 风格指南,我通常会使用 count, unused_price = ...,因为 pylint 被配置为忽略对以 unused_ 开头的裸名的分配(并警告使用任何此类裸名!-)。但我不知道如何指示PyDev 这样做!

      【讨论】:

      • 我刚刚升级到 PyDev 2.2.2,现在它似乎默认识别 unused_ 约定并且没有给出任何警告
      【解决方案5】:

      我宁愿将其命名为 _price,原因如下:

      • 解决了gettext和交互式提示的冲突,两者都使用_

      • 如果您以后需要它,很容易改回 price。

      • 正如其他人所指出的,前导下划线在许多语言中已经具有“内部”或“未使用”的含义。

      所以你的代码最终会是这样的:

      (count, _price) = get_count_and_price()
      

      【讨论】:

        【解决方案6】:

        我会去找死灵法师徽章。 :)

        你说你正在使用 PyDev。在 PyDev 中(至少是最近的版本——我没有检查多远),任何以“未使用”开头的变量名都将不受未使用变量警告的影响。不过,其他静态分析工具可能仍然会抱怨(pyflakes 确实如此——但它似乎在元组解包上下文中忽略了这个警告)。

        【讨论】:

          猜你喜欢
          • 2014-01-09
          • 2021-03-29
          • 2012-07-17
          • 2012-06-14
          • 1970-01-01
          • 1970-01-01
          • 2017-12-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多