【Python】for循环中修改索引变量只对当前循环体有效

(1)歪打正着

偶然在for循环中用了同一个计数变量,结果却歪打正着。原因是操作放在子计数变量之前。如下:

>>> for i in range(20):
...     print(i)
...     for i in range(5):
...       i+=100
...
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

这是因为在python中,一个for循环在每次迭代开始时将list / iterable中的下一个元素分配给索引变量。这意味着无论你在循环中做什么,下一个元素都将重新赋值给i。 

简而言之,for循环中修改索引变量只会对当前循环体有效,下一次循环时会给索隐变量重新赋值


(2)歪打没有正着

如果操作放在子计数变量后,随着计数变量的值被改变了,结果就会出错。如下:

>>> for i in range(20):
...     for i in range(5):
...        i+=100
...     print(i)
...
104
104
104
104
104
104
104
104
104
104
104
104
104
104
104
104
104
104
104

(3)python3中的坑:索引变量泄露

如果把print放在两个循环外部,会发现打印出i的最终值104,这说明for循环中的索引变量会泄漏到循环外部。这会带来一些非常隐形的bug。

更复杂的情景见:https://blog.csdn.net/wuhui_gdnt/article/details/88344553

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页