Python 中的命名空间与 C++
Namespaces in Python vs C++
Python 中与 C++ 中的 namespace
和 using
语句最接近的概念是什么?
与其他语言中的 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.h
header仍然会被包含和编译,所以我们仍然可以写 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
中的内容 - 这并不是 必然 的一切。
Python 中与 C++ 中的 namespace
和 using
语句最接近的概念是什么?
与其他语言中的 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.h
header仍然会被包含和编译,所以我们仍然可以写 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
中的内容 - 这并不是 必然 的一切。