在python里导入模块一般有这么几种模式
1
2
3
4
|
import
module
import
module as alias
from module import
foo
from module import
*
|
下面就简单分析下这几种之间有什么区别, 1,2 基本一致,3,4 基本一致,这里就将其分为两组
第一种方式相当于引入了一个新的命名空间以及该空间里的所有变量和函数
第二种方式则是将某一个模块里的方法直接引入一个新的空间,就相当于在新的模块里定义了该方法和变量
下面通过例子来说清楚他们之间的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#module A def foo():
print
"function foo in module A"
def _test_foo():
print
"function _test_foo in module A"
def __an_foo():
print
"function __an_foo in module A"
str_a =
"Hello, str_a"
_str_b =
"Hello, str_b"
|
1
2
3
4
5
6
|
#module B from moduleA import
*
if __name__ = =
"__main__" :
print
dir ()
|
我们看一下执行module B的结果
[‘__builtins__‘, ‘__doc__‘, ‘__file__‘, ‘__name__‘, ‘__package__‘, ‘foo‘, ‘str_a‘]
我们可以看到模块B里新增了有foo 和str_a 两个moduleA的属性,这样就有一个问题了,如果moduleB同时定义了一个函数名为foo那会怎么办呢?答案是moduleB的foo会覆盖moduleA的函数,但是这样总是不好的,所以建议使用import moduleA这样就会通过名字空间将其隔离