Python 中的命名空间与 C++

Namespaces in Python vs C++

Python 中与 C++ 中的 namespaceusing 语句最接近的概念是什么?

与其他语言中的 namespace 指令最接近的等效项是 PEP 420 中描述并在 Python 3.3 中引入的隐式命名空间包工具。它允许将多个位置的模块组合成一个统一的命名空间,而不是强制导入在 sys.path.

中找到的第一个有效候选者。

using没有直接等价物;从模块导入特定名称会单方面将它们添加到本地范围。

没有真正的类似物。考虑这个简单的 header:

// a.h
namespace ns {
    struct A { .. };
    struct B { .. };
}

如果我们这样做:

#include "a.h"
using ns::A;

该代码的要点是能够写 A 不合格(而不是必须写 ns::A)。现在,您可能会认为 python 等价于:

from a import A

但是不管using整个a.hheader仍然会被包含和编译,所以我们仍然可以写 ns::B,而在 Python 版本中,a.B 将不可见。

更广泛的版本:

using namespace ns;

也绝对没有 Python 类似物,因为这会在整个 code-base 中引入 所有 名称 namespace ns - 并且名称空间可以被重用。我看到初学者 C++ 程序员最常做的事情是:

#include <vector>
#include <map>
#include <algorithm>

using namespace std; // bring in EVERYTHING

这一行有点相当于:

from vector import *
from map import *
from algorithm import *

至少在它所做的事情上,但它实际上只带来了 namespace std 中的内容 - 这并不是 必然 的一切。