---- ====== 模块 ====== ---- * 一个模块就是一个文件 * 模块有自己的命名空间 * 模块只会被import一次(再次倒入要用reload函数,常用于修改配置文件) * 查看模块内容 dir(mod_name) * 模块查找路径print sys.path * 要使用某个模块时必须import一次, * 假如a.py要使用time模块,必须执行import time。即使包含a.py的main.py已经import time了。每次import只会在当前文件生效,不会传递 * 但是python解释器会做一次优化,python只执行一次time模块,然后只是把time模块的“使用权”分给其他文件罢了 ====== import流程 ====== - 找到模块位置 - 编译成位码(需要时) - 执行模块中的代码来创建其所定义的对象 ---- ====== 模块只能访问自己的变量 ====== mod1.py v1='from mod1' def f1(): global v1 print v1 main.py import mod1 v1='from main' mod1.v1() 结果: from mod1 ---- ====== import 和 impor..from ====== **import** v1='from main' import mod1 print v1 print mod1.v1 结果: from main from mod1 import 会把模块以对象的形式引用到当前作用域 **form** v1='hello' from mod1 import v1 print v1 结果: from mod1 #import的v1覆盖了当前的v1 把变量名复制到当前作用域(容易引起命名冲突,不建议使用) ---- ====== import 非当前目录下的模块 ====== 假如我要import mod2/mod2.py from mod2 import mod2 #多层目录用 . 链接 print mod2.v2 mod2目录下一定要有一个__init__.py文件(用于标识这个目录是python模块目录,内容可为空),否则无法引入mod2目录下的模块。python首次倒入某个目录时,会自动执行目录下的__init__.py文件,所以__init__.py文件一般用于初始化。 ---- ====== 模块属性 ====== 一个文件(模块)有若干内置属性,这些属性描述了模块的特征。 * __name__ * 模块的名字 * 如果是以顶层文件执行,则自动复制为“__main__” * __all__ * help(mod_name)的时候会展示__all__中的内容 ---- ====== 模块高级功能 ====== * import string as a(为模块取别名) * 动态修改python搜索模块的路径,修改sys.path属性即可 * 导入模块(模块是一个变量) mod_name="string" exec("import", mod_name)