我运行了这个Python代码。
for i in range(1,11):
i=i*2
print(i,end=" ")
它给出了以下输出: 2 4 6 8 10 12 14 16 18 20
'i'如何达到20而仍然留在循环中? 有没有以某种方式创建“i”的新实例?
答案 0 :(得分:0)
for
每次迭代设置目标变量。 range()
为此提供了值,没有别的。您可以将循环体内的i
设置为您喜欢的任何内容,但这不会改变range()
序列为下一次迭代生成的内容。
这就是:
range(1, 11)
序列创建迭代器。它包含对范围对象和索引的引用,从0开始。range(1, 11)[0]
,产生1
i = 1
已执行,循环体已启动i = i * 2
,将i
设置为2 i
,循环体结束range(1, 11)[1]
,产生2
i = 2
已执行,循环体已启动i = i * 2
,将i
设置为4 i
,循环体结束range(1, 11)[2]
,产生3
i = 3
已执行,循环体已启动i = i * 2
,将i
设置为6 i
,循环体结束这一直持续到range(1, 11)[9]
的循环体已经处理完毕;没有range(1, 11)[10]
所以循环结束。
在任何时候都不会将i
设置为循环中的不同值,从而改变循环的运行方式。你必须改变迭代,for
循环迭代的对象,以改变循环的运行方式:
>>> list_of_numbers = [1, 2, 3, 4]
>>> for i in list_of_numbers:
... discard = list_of_numbers.pop() # making the list shorter!
... print(i)
...
1
2
现在循环结束很早,因为我们从迭代表中删除了元素,并且“早期”达到了结束。