'对于' Python中的循环行为

时间:2016-03-03 09:55:38

标签: python for-loop

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

for i in range( 1, 10 ):
    print i
    i = i + 3

以上版画:

1
2
3
4
5
6
7
8
9

但它应该打印出来:

1
4
7

1 个答案:

答案 0 :(得分:41)

每次迭代

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

来自for statement documentation

  

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

i是此处的目标列表,因此会为range(1, 10)对象分配每个值。稍后将i设置为其他内容并不会更改range(1, 10)表达式生成的内容。

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

i = 1
while i < 10:
    print i
    i += 3

但是更容易使用range()一步,生成值预先

for i in range(1, 10, 3):
    print i