有没有办法绕过Python中的命名空间/模块名称?

时间:2013-03-17 14:12:09

标签: python module namespaces styles

如果您有module之类的模块,是否可以绕过它并使用内部可用的功能而不使用模块?

我导入了模块,但编译器仍然抱怨不必找到function。我仍然需要使用module.function()

它还有更多功能,所以我不想逐一重新定义它们,但如果可能的话,请避免输入module

1 个答案:

答案 0 :(得分:6)

在Python中导入只会在命名空间中添加内容。如何限定导入的名称是import foofrom foo import bar之间的差异。

在第一种情况下,您只会导入模块名称foo,这就是您将如何访问其中的任何内容,这就是您需要执行foo.bar()的原因。第二种情况,您明确导入 bar,现在您可以这样调用它:bar()

from foo import *会将所有可导入的名称(在特殊变量__all__中定义的名称)导入当前名称空间。这虽然有效但不推荐,因为您最终可能会意外覆盖现有名称。

foo = 42
from bar import * # bar contains a `foo`
print foo # whatever is from `bar`

最佳做法是导入您需要的任何内容:

from foo import a,b,c,d,e,f,g

或者您可以使用别名

import foo as imported_foo

底线 - 尽量避免使用from foo import *