让我们采用标准的Java for循环
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
我可以确切地看到这个for循环中发生了什么。 i
初始化为0.检查条件并在每次迭代时进行增量。
这是Python版本
for i in range(0, 10):
print(i)
在这个循环中发生了什么细节?
答案 0 :(得分:3)
误解是这两个循环不相似。
Java的表单从一些初始值开始,将其打印出来,只要该值小于某个终值,它就会继续循环。
Python实际上是将每个元素包含在你给它的任何可迭代中,并打印出它的内容而不做任何增加。
因为在这种情况下,iterable是range
的结果,你在不同版本之间获取元素的行为会发生变化。
如果你正在使用Python&lt; 3,range
是一个急切地生成一个元素列表供你使用的函数。延迟生成的变体是xrange
,其中根据需要生成值。在这种情况下,由于您在整个集合中循环完成,并且内存约束不是那么高,因此您不会注意到两者之间存在任何差异。
在Python&gt; = 3,range
behaves similar to xrange
中,它是另一种序列类型,它也会生成动态所需的值。
这里的关键区别在于Python循环中的变量表示iterable中包含的实际值,而Java正在使用标准for
循环生成值。
如果您使用enhanced-for loop代替,那么您将更接近以了解Python的循环如何工作:
int[] list = {1, 2, 3, 4, 5, 6, 7, 8, 9}
for(int i : list) {
System.out.println(i);
}
答案 1 :(得分:1)
看一下range()
内置函数的文档,可以看到这个函数&#34;创建包含算术进度的列表&#34;。这个列表是迭代的,好像它直接传递给循环:
for i in range(0, 10):
print(i)
此代码与
基本相同for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
print(i)
in
关键字基本上是对提供的可迭代对象中的每个元素说 - 在本例中是一个列表。 &#34;对于列表中的每个项目&#34;。循环知道何时停止,因为范围函数生成有限列表 - 该列表具有它的长度,这是停止条件。在内部,当循环尝试读取超出范围的索引时,会生成StopIteration
exception并触发终止条件。
答案 2 :(得分:1)
range(0,10)
返回0到9之间的数字列表。
循环遍历此列表,每次迭代都会将列表中的下一个数字分配给i