Python 中模块的导入(import,from-import-)
模块导入相关
- 别人写好的变量,函数,方法,放到一个文件中就是模块
- 不是所有的模块都是py文件,除此之外还有dll,zip文件
- 大多数自定义模块基本都是py文件,另外模块名要符合变量的命名规则
- 导入一个模块就是执行一个模块
- 使用模块中的一个方法(函数,变量等)时格式为 模块名.方法名
- 另外导入的模块和当前文件不在同一个命名空间,当前空间和模块空间只是指向关系
- 在当前空间中修改对象名或方法只是修改了指向,不会修改模块的内容
- 如果多次导入同一个模块也只会创建一个命名空间,即第一次导入创建,再导入就不会执行
- 模块的导入应该分类导入:内置模块,第三方模块,自定义模块,每个类型之间空格分开
包导入相关
- 所谓的包其实就是文件夹中有一个__init__.py文件】
- 包其实就是模块的集合
- 导入时凡是带点的左边都是包。如果使用from import则import后不带点
模块的 import 导入
- 导入一个模块, 格式为 import 模块名
- 导入多个模块, 格式为 import 模块1,模块2…用逗号把各模块分开
- 给模块起别名, 格式为 import 模块1 as 别名1,模块2 as 别名2
- 注意起完别名后,只能用别名来调用模块的方法,模块名调用失效
模块的 from import 导入
- 导入一个模块,form 文件名(包) import 模块名
- from import 导入时仍然会执行整个模块,但是import的谁就只能用谁
- 之所以存在from import 导入方法是因为直接import 文件名(包)时什么都不会发生,包中的模块方法也不能使用
- 导入多个模块, form 文件名(包) import 模块1,模块2…用逗号把各模块分开
- 给模块起别名, form 文件名(包) import 模块1 as 别名1,模块2 as 别名2…
- 导入所有模块, form 文件名(包) import *,导入模块中所有__all__=[]中的对象名,默认是所有对象名
- 另外__all__只能约束*的导入,不能约束其他
模块的在导入中出现的问题
- 模块不能循环引用,意思就是模块引用模块b后,b不能再引用a,否则会报错。
- 模块在导入时不能形成引用闭环,否则会报错,如a-b-c-a就会报错
- 程序在执行过程中修改其导入的模块,程序运行效果不会改变
- import importlib ,导入importlib,并使用importlib.reload(模块名),会重新加载模块
- 在cmd执行,或者python执行,直接运行,这个文件就是一个脚本,就是以脚本形式运行
- 导入这个文件,这个文件就是模块,就是以模块形式运行
- 脚本执行时应该有返回内容即输出,以模块执行时不应该有返回内容,此时可以用如下方式:
def func():
pass
if __name__=__main__:
func
- 模块搜索路径,见sys.path()