为什么这个循环没有破裂?

时间:2011-11-12 20:20:39

标签: python

Python noob;请解释为什么这个循环不会退出。

for i in range(0,10):
  print "Hello, World!"
  if i == 5: i = 15
  print i
next

问候

6 个答案:

答案 0 :(得分:5)

因为您对range(0,10)所做的事情是由10个元素组成的数组,如下所示:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

你正在经历每一个。

在其他编程语言中,您正在执行所谓的foreach循环。

否则,请采取其他方式。

答案 1 :(得分:5)

因为Python的for循环不计算,所以它会迭代。 range生成一个iterable(Python 2.x中的列表),并迭代该iterable。每次执行循环体之前,都会从中拉出下一个项,并且您在循环体中对迭代变量所做的更改不会影响下一个值应该是什么的内存。那是在其他地方保存的,你通常不会影响它。只需使用break

答案 2 :(得分:3)

您正在迭代range对象,该对象只是0...10范围内的值集合。它背后没有逻辑,因为它只是一组数字。

for item in set语法基本上只是遍历set中的每个元素,只有在每个项目都被循环时才会中断。

您的代码与 不等效 到C ++ for循环,这将产生您想要的结果:

for (int i = 0; i < 10; i++) {
  if (i == 5) {
    i = 15;
  }
}

如果你想摆脱循环,只需break循环:

for i in range(0,10):
  print "Hello, World!"
  if i == 5: break
  print i

答案 3 :(得分:2)

因为for i in whatever表示对于whatever中的每个元素,一旦将i设置为该元素,就会执行循环体。没有规则表明在每次迭代结束时,i仍必须是whatever的元素。

在循环体中重新分配i对循环体执行的频率或在下一次迭代中将保留的值i没有任何影响。

答案 4 :(得分:1)

为什么会退出?你正在迭代range(0, 10)的元素,唯一的退出条件是你的元素耗尽。重新绑定名称不会更改iterable中的任何内容。如果您想提前破坏,请使用break

for i in range(0, 10):
    if i == 5: break

答案 5 :(得分:1)

在python中,for循环不是像C或Java那样的while循环;相反,它是对可迭代的迭代。

在你的情况下(假设Python 2.x)range(0, 10)(顺便说一下,与range(10)相同)是一个返回列表的函数。 python列表是一个可迭代的,因此可以在for循环中使用...语言将做的是将变量分配给第一,第二,第三元素等等,每次它将执行正文部分for

如果在主体中更改该变量并不重要...... Python将只选择列表的下一个元素,直到所有元素都被处理完毕。考虑一下你的循环与

没有什么不同
 for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
     print "Hello, world."
     if i == 5: i = 15
     print i

反过来也与

非常相似
 for i in [1, 29, 5, 3, 77, 91]:
     print "Hello, world."
     if i == 5: i = 15
     print i

为什么i的作业会打破循环?