模块就是Python文件,里面定义了很多的函数、类、变量
一个完整大型的python程序是由模块和包的形式组织起来的,可见模块在python中的重要性。
python包实际上就是一个目录
包结构的目录里可以有一个init.py模块(在python2中这个是必须的,在python3中是可选的)

模块的导入
直接导入:import 模块
从模块里导入函数/从包导入模块:from xxx import xxx
导入所有函数:from xxx imoprt * (不推荐)
使用名字动态导入:mod = input("请输入你想要的模块:")
imoprt importlib
变量名(自定义,可以是模块名,包名) = imoprtlib.import_module(mod)
mod是一个字符串(例如mod可以是'math'或'math.sqrt'直接导入模块的用法)

1.当同一个模块重复导入时,只执行第一次
2.当导入两个同名的模块时,两个都会执行,当前生效的是后一个(若两个都要使用,建议用as取别名)
python11_模块与包

相对导入:使用 . 或 .. 来进行导入
相对导入只能导入包中的模块/子包,同一级目录里的不行
对于当前被执行文件来说:当前执行文件所在目录不是一个包,子目录及更深的目录都是包
python11_模块与包_第1张图片
上图中top_levell是main文件,只能在main的同级或子目录下导入,若top level是tr文件,则不能往bao1以外的那些文件导入(运行哪个文件,该文件就是top level)

python下划线:
标识符是用来标识某种对象的名称。以下划线开头的标识符是有特殊意义的。
下划线的特殊含义(模块):
1.以单下划线开头
表示保护对象,不能用 from xxx import 导入包/模块
2.以 双下划线开头
表示私有对象,不能用 from xxx import
导入包/模块
3.以双下划线开头和结尾的
代表Python中特殊方法专用的标识,不建议使用

内置属性:
1)name
当自己执行时,等于name的值为main
当被作为模块导入,等于文件名(不包含后缀, 可含模块名)
2)import
导入模块
3)file
打印模块路径

python模块导入执行的过程:
1.通过sys.path环境变量找到模块文件
2.编译成字节码文件(pyc文件)
3.如果字节码过期了会自动重新生成
4.如果字节码文件已存在则直接导入字节码文件
5.执行模块中的代码来创建所定义的对象

PS:1.对于pyhton模块命名空间作用域, 一定要注意成员变量的范围
2.对于name属性的使用, 防止代码大量加载运行
3.对于模块的导入的几种方式要灵活去运用
4.Python模块的打包
5.软件目录结构