全局名称 'a' 是否与模块在同一个命名空间中?

Is the global name 'a' in the same namespace as the module?

import math

a = 1

def my_func():
    print('don\'t downvote')

my_func()

我认为函数调用 my_func( ) 位于为函数 my_func( )[ 创建的本地名称空间中=18=] - 准备更正。名称 a 是否包含在为 math 模块创建的同一个全局命名空间中?

没有。假设您的文件名为 foo.py。导入模块时,会为 foo 创建一个新的全局命名空间,它包含(除其他外)三个名称:

  1. math,指的是math模块`
  2. my_func,指的是你的函数
  3. a,指1

调用函数的位置并不重要。如果 my_func 包含任何自由变量,它们将 总是 引用 foo 的全局命名空间,而不是调用它的命名空间。

math 模块有自己的全局命名空间。 ("Global" 确实不是一个好词;每个模块都有自己的模块级命名空间。)

Python 中唯一的 "global" 命名空间是内置命名空间,可从所有模块访问。