模块是一个可以交互使用,或者从python程序访问的代码段。只要导入一个模块就可以使用这个模块的任何公共函数、类或者属性。
python有三种导入模块的方法
(1)【import modname】
使用这种方式相当于在当前导入的命名空间(namespace)里新建了一个modname的引用,所以在使用该模块的方法或属性时,必须加上模块名称,例如:modname.func()
当存在方法存在重名函数时,必须使用import modname的导入方式,便于区分是哪个模块里的func。
(2)【from modname import func/classname】
(2)【from modname import a,b,c】
这个时候的func或者是classname被直接导入到了本地命名空间去了,所以可以直接使用,不需要添加模块名称
(3)【from modname import *】
使用这种方式,modname所有的公有方法或者是类都被导入到了本地命名空间了;可以直接使用,不需要添加模块名称;但是这样在判断本地方法或者外地方法时会有困难。
(4)【mod=__import__("modname",global(),local(),"funcname/classname")】
这个函数相当于是from modname import funcname/classname;
---------------------------------------------------------------------------------------------------------------
例子:
(1)模块的内容都放在一个模块文件中,如 mymodule 的内容应该放在PYTHONPATH 目录下的一个mymodule.py中,C实现的除外
(2)包可以将几个模块名称空间组织起来, 如A.b 就表示在包A中的一个子模块b
可以单独导入某一个子模块,如Python文档中给出的例子
import sound.effects.echo
这样必须使用全称对里面的对象进行引用,如
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
还可以使用下面的语句来加载echo子模块
from Sound.Effects import echo
它在没有包前缀的情况下也可以使用, 所以它可以如下方式调用:
echo.echofilter(input, output, delay=0.7, atten=4)
不主张从一个包或模块中用import * 导入所有模块,因为这样的通常会导致可读性很差。
from Package import specific_submodule的用法并没有错,实际上这还是推荐的用法,除非导入的模块需要使用其它包中的同名子模块(the importing module needs to use submodules with the same name from different packages).
综上所述,一般情况应该使用import , 但有几个例外
1)module文档告诉你要用from-import的
2)导入一个包组件。需要一个包里面的某个子模块,一般用from A.b import c比import A.b.c 更方便 且不会冒混淆的危险.