为什么以下简单循环不会在循环结束时保存i
的值?
for i in range( 1, 10 ):
print i
i = i + 3
以上版画:
1
2
3
4
5
6
7
8
9
但它应该打印出来:
1
4
7
答案 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