【问题标题】:How to define namespace in python?如何在python中定义命名空间?
【发布时间】:2016-09-28 09:48:53
【问题描述】:

似乎 python 确实有命名空间。但我所能得到的只是人们告诉我命名空间或范围是什么。那么如何在 python 中定义命名空间呢?我需要的只是语法(如果有一个例子会更好)。

【问题讨论】:

  • @j4ck 那么该问题的哪个答案已经回答了我的问题?
  • 第一个。命名空间不是你可以明确地define。它们由您编码的范围给出。
  • 例如,如果您在函数定义中定义了一个变量,该变量仅在该函数的作用域和命名空间内,这意味着其他函数或部分代码看不到它。
  • 也许this 可能有助于阐明更多信息?

标签: python


【解决方案1】:

Python 中的“命名空间”更多地由磁盘上的代码布局定义,而不是任何特定语法。给定一个目录结构:

my_code/
    module_a/
        __init__.py
        a.py
        b.py
    module_b/
        __init__.py
        a.py
        b.py
    __init__.py
    main.py

假设每个a.pyb.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.pyfn() 以及来自module_b/b.pyfn(),我们可以做以下两件事之一:或者我们使用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

我希望这有助于进一步阐明用法。

【讨论】:

  • 此答案不考虑 Classes、NamedTuples 或其他定义范围并因此是命名空间的事物。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 2012-06-06
  • 2021-12-29
  • 2013-08-11
  • 1970-01-01
  • 2019-06-23
相关资源
最近更新 更多