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
在循环后的代码中再次使用变量名,而不会遇到任何明确的错误。
有没有比在循环之后使用更 Pythonic 的方式del i
来避免上述问题?
编辑:这个问题已被标记为范围规则的简短描述的重复?我很久以前就看过了。该线程描述了作用域在 python 中的工作方式,而我的问题完全不同。请取消将此标记为重复项。
解决方案
在 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
推荐阅读
- ruby-on-rails - Selecting a nested record to share show page of with selected users in action mailer via checkbox selection
- postgresql - 不在 Postgresql 中使用“开始事务”和“提交”语句
- android - Android Studio 活动 Java 文件无法识别 XML
- javascript - How to execute a script by call his id
- r - group_by(Country.Region) 中的错误:找不到对象“Country.Region”
- python - 使用应用程序身份验证时出现 KustoServiceError
- r - 左调整 (hjust = 0) 垂直 x 轴标签在具有自由比例的刻面上
- rest - HttpGetAttribute 在核心 Web api 中不起作用
- java - 如何在 Android Studio 的自定义 Arraylist 中对日期进行排序?
- reactjs - How do make a loading progress when I fetching an API in login function?