for e in collections:
pass在for 循环里, 最后一个对象e一直存在在上下文中。就是在循环外面,接下来对e的引用仍然有效。
这里有个问题容易被忽略,如果在循环之前已经有一个同名对象存在,这个对象是被覆盖的。
如果在有代码感知的IDE中, IDE会提示变量是“被重新声明的”, 但运行时却不会出错。
for循环不是闭包,可以使用dis模块分解以下代码可以看到:
x = 5
for x in range(10):
pass
print x将代码保存到test.py文件,运行python -m dis test.py
C:\Users\Patrick\Desktop>python -m dis test.py
1 0 LOAD_CONST 0 (5)
3 STORE_NAME 0 (x)
3 6 SETUP_LOOP 20 (to 29)
9 LOAD_NAME 1 (range)
12 LOAD_CONST 1 (10)
15 CALL_FUNCTION 1
18 GET_ITER
>> 19 FOR_ITER 6 (to 28)
22 STORE_NAME 0 (x)
4 25 JUMP_ABSOLUTE 19
>> 28 POP_BL

本文探讨了Python中for循环变量作用域的问题,指出在循环前存在同名变量时,IDE虽然不会报错,但在某些情况下可能导致不易察觉的错误。以一个tornado模板语言的实例说明了这个问题,强调了避免与for循环变量重名的重要性,以及Python变量作用域的搜索顺序。
最低0.47元/天 解锁文章
802

被折叠的 条评论
为什么被折叠?



