有没有办法绕过Python中的命名空间/模块名称?
如果你有一个像 module
这样的模块,你能不能不使用这个模块,直接用里面的函数呢?
我已经导入了这个模块,但编译器还是说找不到 function
。我还是得用 module.function()
来调用。
这个模块里还有很多其他函数,所以我不想一个一个重新定义,只想尽量避免每次都输入 module
。
1 个回答
6
在Python中,导入其实就是把一些东西加到你的命名空间里。你如何使用导入的名字,就是 import foo
和 from 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 *
。