与c,c ++等其他语言不同,变量的范围位于循环内。例如
for(int i=0; i<5; i++)
{
do stuff;
}
i+=1 // raises error as i is not initialised.
同一代码在python中工作
for i in range(5)
do stuff
i+=1 # doesn't raise error as i is initialised.
尽管有时这会有所帮助,但有时却很痛苦,即使我很少在循环后的代码中再次使用i, key, value
之类的变量名而没有遇到任何显式错误。
是否有比在循环后使用del i
更好的python方式来避免上述问题?
编辑:这个问题被标记为我很久以前见过的Short description of the scoping rules?的重复项。该线程描述了作用域如何在python中工作,而我的问题则完全不同。请取消标记为重复项。
答案 0 :(得分:0)
在Python3中,列表理解可能是一个答案...?
[print(i) for i in range(5)]
print(i)
>> 0
1
2
3
4
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-598b4fd0c0c5> in <module>()
1 [print(i) for i in range(5)]
----> 2 print(i)
NameError: name 'i' is not defined