'For循环行为在Python中

Nis*_*ngh 10 python for-loop

为什么以下简单循环不保存循环i结束时的值?

for i in range( 1, 10 ):
    print i
    i = i + 3
Run Code Online (Sandbox Code Playgroud)

以上打印:

1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)

但它应该打印:

1
4
7
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 41

for i每次迭代设置为迭代对象的下一个值.无论你i在循环中设置什么,都会被忽略.

for声明文件:

然后,对于迭代器提供的每个项,按升序索引的顺序执行一次该套件.依次使用标准的分配规则将每个项目分配给目标列表,然后执行该套件.

i是这里的目标列表,因此它从range(1, 10)对象中分配了每个值.i稍后设置为其他内容不会改变range(1, 10)表达式生成的内容.

如果要生成一个可以改变的循环,请i改用while循环; 它每次重新测试条件:

i = 1
while i < 10:
    print i
    i += 3
Run Code Online (Sandbox Code Playgroud)

但它会更容易,只需使用一个range()带有台阶,生产值前面:

for i in range(1, 10, 3):
    print i
Run Code Online (Sandbox Code Playgroud)

  • @NishantSingh你可以控制你的范围(1,10,3)中的步骤 (15认同)
  • 我认为`for iterable中的`:`和`foreach(x in iterable){`几乎完全相同,从理解的角度来看.这里唯一的问题是`i in range(1,10)`实际上是一个布尔表达式,当不在for循环的上下文中使用时.因此有人可能会对while循环感到困惑.对于许多语言的循环来说,有点像IMO的误解.他们真的是在循环但是有一些语法糖. (2认同)