尝试使用下划线和输入来理解 Python 循环

新手上路,请多包涵

还有一个提示——如果有人在 HackerRank 上学习 Python,知道这一点对于入门至关重要。

我试图理解这段代码:

     stamps = set()
    for _ in range(int(input())):
        print('underscore is', _)
        stamps.add(raw_input().strip())
        print(stamps)

输出:

     >>>2
    underscore is 0
    >>>first
    set(['first'])
    underscore is 1
    >>>second
    set(['second', 'first'])
  1. 我把 2 作为第一个原始输入。该函数如何知道我只循环了两次?这让我失望,因为它不是典型的…for i in xrange(0,2) 结构。

  2. 起初我的想法是下划线重复 shell 中的最后一个命令。所以我在代码中添加了 print 语句以查看下划线的值…但是值只显示 0 和 1,就像典型的循环结构一样。

我已经通读了这篇文章,但仍然无法理解使用了下划线的这 3 种用法中的哪一种。

Python中单下划线“_”变量的用途是什么?

我刚刚开始学习 Python,所以非常感谢简单的解释!

原文由 jhub1 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 661
2 个回答

ncoghlan 的回答 列出了 _ 在 Python 中的 3 种常规用法:

  1. 在交互式解释器会话中保存最后执行的语句的结果。这个先例是由标准的 CPython 解释器开创的,其他解释器也纷纷效仿

  2. 对于 i18n 中的翻译查找(我相信是从相应的 C 约定中导入的),如代码所示:

>     raise forms.ValidationError(_("Please enter a correct username"))
>
>    ```
>
> 3. 作为通用的“一次性”变量名,表示函数结果的一部分被故意忽略,如代码所示:
>
>
>    ```
>      label, has_label, _ = text.partition(':')
>
>    ```

* * *

您的问题是您的代码示例中使用了其中的哪一个。答案是这是一个一次性变量(案例 3),但它的内容被打印 **在这里** 用于调试目的。

然而,使用 `_` 作为循环变量并不是通用的 Python 约定,如果它的值以任何方式使用的话。因此你经常会看到:

for _ in range(10): print(“Hello world”)


其中 `_` 立即向读者发出信号,该值并不重要,循环仅重复 10 次。

但是在诸如

for i in range(10): do_something(i) “`

在使用循环变量值的地方,约定使用变量名,例如 ij 而不是 _

原文由 Antti Haapala – Слава Україні 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于任何试图理解下划线和输入如何在循环中工作的人——在花费相当长的时间调试和打印之后——这里是让我理解发生了什么的代码。

     for _ in range(int(raw_input())):
        print raw_input()

用户输入:

     2
    Dog
    Cat

输出:

     # no output despite entering 2, but 2 is set as range - loops 2 times
    Dog
    Cat

奖励 - 注意 for 循环中的第一行如何进行 int() 转换?

第一个输入是 2,因此 int() 可以很好地转换它。您可以看出第一行代码现在被忽略了,因为通过 int() 放置第二个输入“Dog”会产生错误。不能把单词变成整数。

原文由 jhub1 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题