如何比较Python和C++中的命名空间?
在Python和C++中,命名空间不能真正地进行比较。例如,在C++中 −
// a.h
namespace ns {
struct A { .. };
struct B { .. };
}
如果我们这样做 −
#include "a.h"
using ns::A;
这段代码的目的是使A无需限定名称(即不必写ns::A)。现在,你可能会认为Python中的等价代码是 −
from a import A
但是,无论使用什么,在编译时整个a.h头文件仍然会被包括和编译,因此我们仍然可以写ns::B,而在Python版本中,a.B是不可见的。另一个C++版本,
using namespace ns;
也没有Python的类似物。它从命名空间ns中带来了整个代码库中的所有名称——并且命名空间是可以被重用的。例如,
#include <vector>
#include <map>
#include <algorithm>
using namespace std; //带入 EVERYTHING
那行代码在某种程度上相当于 −
from vector import *
from map import *
from algorithm import *
至少在它的功能方面是这样的,但它实际上只带来命名空间std中的内容,这并不一定是所有的内容。
更多Python相关文章,请阅读:Python 教程
极客教程