python - 全局名称“a”是否与模块在同一个命名空间中?
问题描述
import math
a = 1
def my_func():
print('don\'t downvote')
my_func()
我相信函数调用my_func()位于为函数my_func()创建的本地命名空间中- 准备好进行更正。名称a是否包含在为数学模块创建的同一个全局命名空间中?
解决方案
不,假设您的文件名为foo.py
. 当你的模块被导入时,一个新的全局命名空间被创建foo
,它包含(除其他外)三个名称:
math
, 指的是math
模块`my_func
,它指的是你的功能a
, 指的是 1
你的函数在哪里被调用并不重要。如果my_func
包含任何自由变量,它们将始终引用foo
的全局命名空间,而不是调用它的命名空间。
该math
模块有自己的全局命名空间。(“全局”确实不是一个好词;每个模块都有自己的模块级命名空间。)
Python 中唯一的“全局”命名空间是内置命名空间,可从所有模块访问。
推荐阅读
- tfs - 可以使用 GIT 访问哪些 TFS 2018 存储库?
- ios - 如何在 React Native 的 Alert 组件中添加 Star Rating?
- aws-lambda - 参数 ScheduleExpression 无效 - AWS Lambda 触发器计划
- python - 如何用空值替换动态正则表达式?
- amazon-web-services - 如何在 AWS Sagemaker 上部署朴素贝叶斯模型
- java - 如何使用 Maven 和外部 jar 为 java 项目创建和运行单个 jar 可执行文件?
- c# - 无法在 Windows 2016(内部版本 1607)上安装 MSIX 包
- python - 当字符串列表包含“inf”时,将其转换为列表时出错
- python-3.x - Django 管理字段。在关系字段中获取值
- string - 在半列之前和之后拆分字符串 [Kotlin]