为什么Python中的with块不需要全局关键字?

问题描述 投票:0回答:1

[我正在使用with块从文件中提取信息,并且令我感到惊讶的是with块中声明的任何变量都是全局变量。它们不应该是with块的本地对象,并且在更改全局变量之前也不需要使用global myVar吗?毕竟with定义了一个代码块,对吧?

python python-3.x global-variables with-statement
1个回答
1
投票

Python没有块范围。 with语句未引入新的作用域;语句的主体仍与with语句处于同一作用域。

Python有四种作用域:

  1. 内置作用域,定义了在没有显式import的情况下在任何模块中可用的名称。
  2. 全局作用域,每个模块一个。
  3. 非本地范围
  4. 本地作用域:由函数定义。

每个名称都首先在本地范围(如果不在函数定义内,则可能是全局范围)内查找,然后在任何非本地范围内(如果在全局范围内定义了一个函数,则可能不存在)本地范围),然后是全局范围,最后是内置范围。

© www.soinside.com 2019 - 2024. All rights reserved.