2017-06-04 49 views
0

我观察到,即使你通过from e.g为什么模块通过“从”导入时无法访问的名字

from b import x 

整个模块导入Python模块被加载。它可以在sys.modules字典中看到。那么为什么我们的程序无法访问模块b的名称。我错过了什么?

它看起来像主(顶级)文件的名称空间没有模块名称。

但我无法验证这一点,因为我无法看到主文件命名空间。它也不好,只是从__dict__删除一项没有很多好处。有人可以详细解释这一点吗?

+1

为什么*它会被访问?通过使用'from b import x',你指定你*只*希望将'x'添加到当前名称空间。如果你想要所有的'b',加入'import b'。 – jonrsharpe

+0

@jonrsharpe我明白,如果我使用'import b',我可以访问b,但是我正在寻找一些原因,为什么保持模块名称不可访问(在python中)是不合逻辑的,即使我们想直接使用模块的属性?这个执行的开销是多少? – hunch

+2

好的*显式优于隐式*,例如。另一方面,这就是参考文献所说的:https://docs.python.org/3/reference/simple_stmts.html#the-import-statement。这并不是说它不会*“保持模块名称可访问”*,但它并不能使它开始。 – jonrsharpe

回答

1

因为这就是语法的作用;它只会导入您指定的名称,而不是包含的模块。如果你想要模块本身,只需要做import b

+0

据我所知,如果我使用导入b我会得到访问b,但我正在寻找一些原因,为什么是即使我们想使用模块的直接属性,保持模块名称可访问(在python中)也是不合逻辑的?这个执行的开销是多少? – hunch