Python 中的“命名空间”更多地由磁盘上的代码布局定义,而不是任何特定语法。给定一个目录结构:
my_code/
module_a/
__init__.py
a.py
b.py
module_b/
__init__.py
a.py
b.py
__init__.py
main.py
假设每个a.py 和b.py 文件都包含一个函数fn(),解析命名空间的导入语法的工作方式如下(来自main.py):
from module_a.a import fn # fn() from module_a/a.py
from module_a.b import fn # fn() from module_a/b.py
from module_b.a import fn # fn() from module_b/a.py
from module_b.b import fn # fn() from module_b/b.py
此时,fn() 在main.py 中可用,并将调用您导入的任何实现。
也可以使用from module import * 语法,但不鼓励这样做,以便更具体:
from module_a.a import *
这里,fn() 可以在main.py 中使用,module_a/a.py 中定义的任何其他符号也可以使用。
如果我们想同时访问module_a/a.py 的fn() 以及来自module_b/b.py 的fn(),我们可以做以下两件事之一:或者我们使用from module import thing as something 语法:
from module_a.a import fn as module_a_fn
from module_b.b import fn as module_b_fn
并在我们的main.py 中使用它们作为module_a_fn() 和module_b_fn(),或者我们可以只导入模块并直接在代码中引用它,所以在main.py:
import module_a.a
import module_a.b
module_a.a.fn() # call fn() from module_a/a.py
module_a_b.fn() # call fn() from module_a/b.py
我希望这有助于进一步阐明用法。