似乎python确实有名称空间.但我能得到的是人们告诉我什么名称空间或范围.那么如何在python中定义命名空间?我只需要语法(并举例说明会更好).
Python 中的“命名空间”更多地是由磁盘上代码的布局定义的,而不是由任何特定语法定义的。给定一个目录结构:
my_code/
module_a/
__init__.py
a.py
b.py
module_b/
__init__.py
a.py
b.py
__init__.py
main.py
Run Code Online (Sandbox Code Playgroud)
假设每个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
Run Code Online (Sandbox Code Playgroud)
此时,fn()可以在其中使用main.py并将调用您导入的任何实现。
也可以使用from module import *语法,但为了更具体,不鼓励这样做:
from module_a.a import *
Run Code Online (Sandbox Code Playgroud)
这里,fn()可以在 中使用main.py,也可以在 中定义的任何其他符号使用module_a/a.py。
如果我们想要访问module_a/a.py'sfn()和fn()from module_b/b.py,我们可以执行以下两种操作之一:要么使用以下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
Run Code Online (Sandbox Code Playgroud)
并在我们的main.pyasmodule_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
Run Code Online (Sandbox Code Playgroud)
我希望这有助于更多地阐明用法。
| 归档时间: |
|
| 查看次数: |
3967 次 |
| 最近记录: |