模块(module)和C语言中的头文件以及Java中的包很类似,在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。
import math
#这样会报错
print sqrt(2)
#这样才能正确输出结果
print math.sqrt(2)
有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以用下面方法实现:
from 模块名 import 函数名1,函数名2....
# 如果想一次性引入math中所有的东西,还可以通过from math import *来实现
注意:如果一个文件中有__all__变量,那么也就意味着这个变量中的元素,不会被from xxx import *时导入。
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
当前目录
如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字,如下所示 test.py文件即为一个模块:
def add(a,b):
return a+b
# 以下是模块作者的测试代码,无需执行,则需要根据__name__变量的结果能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行测试代码
if __name__ == 'main':
print('test..')
在另外一个文件调用该模块:
import test
result = test.add(11,22)
print(result)
多个模块互有关系,且最终在合作下统一向外提供一些功能,此时可以将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包。
init.py 控制着包的导入行为,仅仅是把这个包导入,不会导入包中的模块。在__init__.py文件中,定义一个__all__变量,它控制着 from 包名 import *时导入的模块:
__all__ = ["sendMsg", "receiveMsg"]
print("---1---")
def test():
print("---2---")