Python 导入之星创建隐藏命名空间?

标签 python import scope

我最近遇到了一些不寻常的行为。

foo.py

a = 0
def bar():
    print (a)

控制台:

>>> import foo
>>> foo.bar()
0
>>> foo.a = 10
>>> foo.bar()
10

控制台:

>>> from foo import *
>>> bar()
0
>>> a
0
>>> a = 10
>>> a
10
>>> bar()
0

我推断 import * 实际上创建了 a 的两个副本 - 一个在全局命名空间中,一个在 foo 模块中无法访问。是否在任何地方解释/记录了这种行为?我不知道要搜索什么。

这似乎是 import * 的一个值得注意的意外结果,但出于某种原因,我以前从未见过它被提出来。

最佳答案

在 Python 中没有隐藏命名空间这样的东西,所描述的行为是正常的和预期的行为。

你应该阅读 https://docs.python.org/3/tutorial/modules.html#more-on-modules为了更好地理解全局变量是如何工作的。

关于Python 导入之星创建隐藏命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33904361/

相关文章:

Python从多列中获取值计数并从另一列中取平均值

python - 使用 flask-wtforms 输出类型 ="number"

flutter - 如何在 flutter 中将变量从一个 .dart 文件导入到另一个 .dart 文件

javascript - 发送带有 JQuery 脚本的 html 电子邮件

javascript - 未为立即调用的函数提升 const 变量

python - 使用 ArtistAnimation 在 matplotlib 中动画化 png

PHP CSV - MYSQL 超时

ruby-on-rails - Rails 范围适用于 SQLite 和 MySQL,但不适用于 Heroku (PostgreSQL)

c - 堆栈上的本地范围记录

python - 自动格式化python代码的工具?