Python Import Star创建隐藏的命名空间?

use*_*r65 6 python import scope

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

foo.py

a = 0
def bar():
    print (a)
Run Code Online (Sandbox Code Playgroud)

安慰:

>>> import foo
>>> foo.bar()
0
>>> foo.a = 10
>>> foo.bar()
10
Run Code Online (Sandbox Code Playgroud)

安慰:

>>> from foo import *
>>> bar()
0
>>> a
0
>>> a = 10
>>> a
10
>>> bar()
0
Run Code Online (Sandbox Code Playgroud)

我推断这import *实际上是创建了两个副本a- 一个在全局命名空间中,一个在foo模块内部,无法访问.这种行为是在任何地方解释/记录的 我在找出要搜索的内容时遇到了麻烦.

这似乎是一个显着和意想不到的结果,import *但由于某种原因,我以前从未见过它.

sor*_*rin 1

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

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