python-16:模块 包
Python 模块
模块定义
随着程序越来越庞大,需要分隔成几个文件;也需要能在不同文件中复用函数、类和变量,而不是拷贝代码。为了满足这些需要,Python提供了模块。
简单来说,模块就是一个保存了Python代码的文件(.py 文件)。文件名 就是 模块名 (modulename)加上 .py 后缀。
模块能定义函数,类和变量。模块里也能包含可执行的代码。模块的模块名(作为一个字符串)可以由全局变量 __name __ 得到。
函数名,模块名都可看着变量名。
导入模块
1、import modulename1 [, modulename2[,... modulenameN] 可通过 import 语句导入一个或多个模块,模块导入命令通常放在脚本顶端。
2、from packegename import modulename1[, name2[, ... nameN]] 从模块中导入一个或多个指定的部分到当前命名空间中
3、from packegename import * 导入模块中的所有定义(除了以下划线_命名的),这种声明不该被过多地使用。
注:import modulename,实质:1、执行modulename.py文件(实质,将此文件代码全部导入);2、引入变量名(modulename,模块名就是变量名),故有,modulename.function()
注:pagegename,实质是一个文件夹,但包含了一个__init__.py文件,
注:执行文件和引用文件,一般bin.py是一个程序入口文件,bin.py中的import modulename,modulename.py就是一个引用文件
定位模块
当你导入一个模块,Python解析器对模块位置的搜索顺序是: 通过 import sys sys.path查看,
1. 当前目录,(指的是执行文件的当前目录,即执行的那个文件的目录)
2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录
3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
运行本质
#1 import test
#2 from test import add
无论1还是2,首先通过sys.path找到test.py,然后执行test脚本(全部执行),区别是1会将test这个变量名加载到名字空间,而2只会将add这个变量名加载进来。
import只能导入模块,不能导入模块中的对象(类、函数、变量等)。如一个模块A(A.py)中有个函数getName,另一个模块不能通过import A.getName将getName导入到本模块,只能用import A。如果想只导入特定的类、函数、变量则用from A import getName即可。
调用包实质就是执行包下的__init__.py文件,包之间的引用,用点操作,如:from web.web1.web2 import test
if __name__=='__main__':有两层意思:1、在模块中用,是为了模块的测试;2、在主程序(bin.py)中用,是为了防止被其它用户调用自己的主程序