还有一个提示 - 如果有人在HackerRank上学习Python,那么知道这对于开始是至关重要的。
我正在尝试理解这段代码:
stamps = set()
for _ in range(int(raw_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'])
我把2作为第一个原始输入。函数如何知道我只循环两次?这让我失望,因为它不是典型的......对于我在xrange(0,2)结构中。
起初我的想法是下划线重复shell中的最后一个命令。所以我在代码中添加了print语句来查看下划线的值......但是这些值只显示0和1,就像典型的循环结构一样。
我已经阅读了这篇文章,但仍然无法理解正在使用这三种下划线中的哪一种。
What is the purpose of the single underscore "_" variable in Python?
我刚刚开始学习Python,所以很容易理解这些简单的解释!
答案 0 :(得分:10)
ncoghlan's answer列出了Python中_
的3种常规用法:
- 将最后执行的语句的结果保存在交互式中 口译员会议。这个先例是由标准的CPython设定的 口译员和其他口译员也纷纷效仿
用于i18n中的翻译查找(从相应的C导入) 惯例,我相信),如代码中所示:
raise forms.ValidationError(_("Please enter a correct username"))`
- 醇>
作为一般用途"一次性使用"变量名称表示该部分 函数结果被故意忽略,如代码所示:
label, has_label, _ = text.partition(':')
您的问题是代码中的示例中使用了哪一个。答案是一个一次性变量(案例3),但其内容打印此处用于调试目的。
然而,如果以任何方式使用其值,则使用_
作为循环变量不是一般的Python约定。因此,您经常会看到:
for _ in range(10):
print("Hello world")
其中_
立即向读者发出信号,表明该值并不重要,循环只重复10次。
但是在诸如
之类的代码中 for i in range(10):
do_something(i)
在使用循环变量的值时,使用变量名称(例如i
,j
而不是_
是惯例。
答案 1 :(得分:1)
下划线就像程序中的常规变量。
答案 2 :(得分:1)
对于那些试图理解下划线和输入如何在循环中工作的人 - 在花了很长时间调试和打印之后 - 这里的代码让我了解了发生了什么。
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
Bonus - 请注意for循环中第一行的int()转换方式如何?
第一个输入是2,所以int()转换就好了。您可以告诉现在第一行代码被忽略,因为将第二个输入'Dog'通过int()会产生错误。不能将单词转换成整数。
答案 3 :(得分:0)
您的代码
stamps = set()
for _ in range(int(raw_input())):
print 'underscore is', _
stamps.add(raw_input().strip())
print stamps
与此完全相同:
how_many_loops = int(raw_input()) # asked only once.
stamps = set()
for i in range(how_many_loops):
print 'loop count is', i
stamps.add(raw_input().strip())
print stamps
由于必须在循环开始之前计算您在range()
中输入的内容,因此第一个int(raw_input())
仅被询问一次。如果您使用for i in range(very_expensive_list)
之类的东西,将花费很多时间,然后开始循环。