循环作用域结束后自动销毁变量

时间:2019-03-26 06:20:10

标签: python

与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中工作,而我的问题则完全不同。请取消标记为重复项。

1 个答案:

答案 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