访问for循环中的变量范围

q09*_*987 8 python

在我发布这个问题之前,我已经搜索了SO,希望这不是一个重复的问题.

def print_me():
    a_list = range(1, 10)
    for idx, aa in enumerate(a_list):
        pass
    print(idx)

if __name__ == '__main__' : print_me()
Run Code Online (Sandbox Code Playgroud)

输出如下:

8

我是从C++世界来的,idx当代码在for循环的一边时,无法弄清楚为什么仍然在范围内?

谢谢

ovg*_*vin 10

for循环不会创建任何范围.这就是原因.

在这个特定的代码中idxprint_me函数的局部变量.

来自文档:

以下是块:

  • 一个模块
  • 一个功能体
  • 一个类定义

更新

Generator表达式也有自己的作用域.

从Python 3.0开始,列表推导也有自己的范围.

  • 实际上,只有极少数语言结构可以创建范围.只有模块范围,类范围和功能范围,这就是它. (2认同)
  • 任何人都知道*为什么*Python不会为`for` /`while`循环创建一个范围?将这些变量放在后面有什么好处吗?(缺点是名称空间污染,因此更多的错误.) (2认同)