首页 > 解决方案 > 全局名称“a”是否与模块在同一个命名空间中?

问题描述

import math

a = 1

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

my_func()

我相信函数调用my_func()位于为函数my_func()创建的本地命名空间中- 准备好进行更正。名称a是否包含在为数学模块创建的同一个全局命名空间中?

标签: pythonmodulenamespacesglobal

解决方案


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

  1. math, 指的是math模块`
  2. my_func,它指的是你的功能
  3. a, 指的是 1

你的函数在哪里被调用并不重要。如果my_func包含任何自由变量,它们将始终引用foo的全局命名空间,而不是调用它的命名空间。

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

Python 中唯一的“全局”命名空间是内置命名空间,可从所有模块访问。


推荐阅读