1. 模块
一个模块就是一个包含pytho代码的文件, 后缀名成是.py就可以,模块就是个python文件
- 为什么我们用模块
- 程序太大,编写维护非常不方便,需要拆分
- 模块可以增加代码重复利用的方式
- 当做命名空间使用,避免命名冲突
- 如何定义模块
- 模块就是一个普通文件,所以任何代码可以直接书写,
- 不过根据模块的规范,最好在木块中编写以下内容
- 函数(单一功能)
- 类(相似功能的组合,或者类似业务模块)
- 测试代码
- 如何使用模块
- 模块直接导入
- 假如模块名称直接以数字开头,需要借助importlib帮助,如:tuling = importlib.import_module('01')
- 语法:
import module_name
module_name.function_name
module_name.class_name
- import 模块 as 别名
- 导入的同时给模块起一个别名
- 其余用法跟第一种相同
- from module_name import func_name, class_name
- 按上述方法有选择性的导入
- 使用的时候可以直接使用导入的内容,不需要前缀
- from module_name import *
- 导入模块所有内容
- `if __name__ == "__main__` 的使用
- 可以有效避免模块代码被导入的时候被动执行的问题
- 建议所欲程序的入口都以此代码为入口
2. 模块的搜索路径和存储
- 什么是模块的搜索路径:
- 加载模块的时候,系统会在那些地方寻找此模块
- 系统默认的模块搜索路径
import sys
for i in sys.path:
print(i)
- 添加搜索路径
sys.path.append(dir)
- 模块的加载顺序
1. 搜索内存中已经加载好的模块
2. 搜索python的内置模块
3. 搜索sys.path路径
3. package
- 包是一种组织管理代码的方式,包里面存放的是模块。用于将模块包含在一起的文件夹就是包
- 自定义包的结构如下:
|---包
|---|--- __init__.py 包的标志文件
|---|--- 模块1
|---|--- 模块2
|---|--- 子包(子文件夹)
|---|---|--- __init__.py 包的标志文件
|---|---|--- 子包模块1
|---|---|--- 子包模块2
- 包的导入操作
- import package_name
- from package import *
4. 命名空间
-
用于区分不同位置不同功能但相同名称的函数或者变量的一个特定前缀
-
作用是防止命名冲突
setName() Student.setName() Dog.setName()