1.模块,模块导入的方法
一、import modname : 模块是指一个可以交互使用,或者从另一Python 程序访问的代码段。只要导入了一个模块,就可以引用它的任何公共的函数、类或属性。模块可以通过这种方法来使用其它模块的功能。
用import语句导入模块,就在当前的名称空间(namespace)建立了一个到该模块的引用.这种引用必须使用全称,也就是说,当使用在被导入模块中定义的函数时,必须包含模块的名字。所以不能只使用 funcname,而应该使用 modname.funcname
二, from modname import funcname
from modname import fa, fb, fc
或者 from modname import *
与第1种方法的区别:funcname 被直接导入到本地名字空间去了,所以它可以直接使用,而不需要加上模块名的限定
* 表示,该模块的所有公共对象(public objects)都被导入到 当前的名称空间,也就是任何只要不是以”_”开始的东西都会被导入。
modname没有被定义,所以modname.funcname这种方式不起作用。并且,如果funcname如果已经被定义,它会被新版本(该导入模块中的版本)所替代。如果funcname被改成指向其他对象,modname不能不会觉察到。
建议:
1)如果你要经常访问模块的属性和方法,且不想一遍又一遍地敲入模块名,使用 from module import
2)如果你想要有选择地导入某些属性和方法,而不想要其它的,使用 from module import
3)如果模块包含的属性和方法与你的某个模块同名,你必须使用import module来避免名字冲突
4)尽量少用 from module import * ,因为判定一个特殊的函数或属性是从哪来的有些困难,并且会造成调试和重构都更困难。
2.模块是程序
Python的任何程序都可以作为模块导入,如下程序,保存在hello.py
#hello.py
print "Hello world!"
假设将模块保存在c:\python 目录中
可执行下面代码告诉解释器在哪里寻找模块
>>>import sys
>>>sys.path.append('C:/python') #告诉编译器,除默认目录,还需要从目录c:\python中寻找模块
>>>import hello
Hello,world!
3.模块用于定义
3.1在模块中定义函数
#hello2.py
def hello():
print "Hello,world!"
可以这样导入调用
>>>import hello2
>>>hello2.hello()
Hello,world!
3.2测试模块
模块被用来定义函数、类和其他一些内容,但是有些时候,在模块中添加一些检查模块本身是否正常工作的测试代码是很有用的
#hello3.py
def hello():
print "Hello,world!"
#A test:
hello()
上面的测试模块在普通程序运行是可以的,在若作为模块导入,测试代码也会被执行
>>>import hello3Hello,world!
>>>hello3.hello()
Hello,world!
为了避免这种情况,关键在于告知模块本身是作为程序运行而不是导入到其他程序,为了实现这点,需用到__name__变量
>>>__name__
'__main__'
>>>hello3.__name__
'hello3'
在主程序中变量__name__的值是'__main__',而在导入的模块,这个值被设定为模块的名字。
#hello4.py
#使用条件测试模块
def hello():
print "Hello,world!"
def test():
hello()
if __name__=='__main__'
如果它为程序运行,hello函数会被调用,而作为模块导入时,它则为普通函数一样