当前位置: 首页 > news >正文

人工智能day9——模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理

一、概念

(一)模块:

定义:模块是一个包含 Python 定义(函数、类、变量等)和语句的文件,文件名就是模块名加上.py 后缀。

本质:每个 .py 文件就是一个独立的模块,包含函数、类、变量等定义

作用:通过将相关功能代码封装在模块中,实现代码的逻辑分离和复用。比如在多个项目中都可能用到上述的加法和减法函数,就可以将其放在一个模块里,在需要时导入使用

例如:创建一个名为math_operations.py 的文件,里面定义一些数学运算相关的函数,这个文件就是一个模块。

# math_operations.py
def add(a, b):return a + bdef subtract(a, b):return a - b

导入模块:

  • 语法:
  1. import 模块名 [as ,模块新名字1]       #导入一个模块到当前程序
  2. from 模块名 import 模块属性名 [as 属性新名]         #导入一个模块内部的部分属性到当前程序
  3. from 模块名 import *                #导入一个模块内部的全部属性到当前程序

比如:

import math_operationsprint(math_operations.add(3,5))  #输出8

模块内部属性:

__file__  绑定模块的路径
__name__  绑定模块的名称
       如果是主模块(首先启动的模块)则绑定 '__main__'
       如果不是主模块则 绑定 xxx.py 中的 xxx 这个模块名

(二)包:

定义:包是一种组织模块的方式,本质上是一个包含__init__.py 文件的目录。__init__.py 文件可以为空,也可以包含初始化包时要执行的代码。包可以包含多个模块和子包,用于管理和组织相关模块。

其实本质就是:一个包含 __init__.py 文件的目录,用于将相关模块组织在一起,形成层级结构

作用:当项目规模较大,模块数量较多时,使用包可以更好地对模块进行分层和分类管理,提高代码的可维护性。比如一个大型的 Web 开发项目,可能会将数据库操作相关模块放在一个database 子包中,视图相关模块放在views 子包中

__init__.py 的作用

  • 标识包:告诉 Python 解释器该目录是一个 Python 包。
  • 初始化逻辑:导入时执行,可包含包级别的初始化代码。
  • 控制导入行为:通过 __all__ 变量控制 from package import * 的导入内容
  • 提供包级别的命名空间: __init__.py 中定义的变量和函数可以在包的模块中共享
  • 批量导入模块: 可以在 __init__.py 文件中批量导入模块,这些模块可以更方便地使用

导入包:

导入语法总结:

        方法1:从包导入模块(也是最常见的)

from package import module     # 直接用模块名访问
module.function()

        方法2:从模块导入具体内容

from package.module import func, Class  # 直接用名称访问
func()
obj = Class()

        方法3:导入所有公开内容(慎用)

from package.module import *   # 导入__all__指定的内容或所有不以下划线开头的内容

        方法4:直接导入包/模块

import package.module          # 需用全路径访问
package.module.function()

对比包和模块导入的区别:

包的导入的内容是模块,一个个py文件,

模块导入的内容是py文件中定义的各种功能单元,例如:函数、类、方法、属性等等

三、常见的系统模块总结和第三方模块总结

(一)系统模块

常见系统模块:
模块功能官方文档
math数学运算math --- 数学函数 — Python 3.12.10 文档
os操作系统接口os --- Miscellaneous operating system interfaces — Python 3.13.5 文档
os.path路径相关os.path --- Common pathname manipulations — Python 3.13.5 文档
datetime日期和时间datetime --- Basic date and time types — Python 3.13.5 文档
random随机数生成random --- Generate pseudo-random numbers — Python 3.13.5 文档
time时间time --- Time access and conversions — Python 3.13.5 文档

1、math模块:

  • 功能概述:提供了各种常用的数学运算函数和常量,可用于数值计算场景,比如三角函数、对数函数、幂运算等常见数学操作,帮助开发者在 Python 中便捷地进行高精度的数学处理,无需自行编写复杂的数学算法实现。
  • 常用方法示例
    • math.sqrt(x):计算 x 的平方根,例如 math.sqrt(9) 返回 3.0
    • math.pow(x, y):计算 x 的 y 次幂,像 math.pow(2, 3) 结果为 8.0
    • math.ceil(x):向上取整,返回大于或等于 x 的最小整数。例如,math.ceil(3.2) 返回 4
    • math.floor(x):向下取整,返回小于或等于 x 的最大整数,如 math.floor(3.8) 返回 3
    • math.trunc(x):直接截断小数部分,返回整数部分,像 math.trunc(3.8) 返回 3
    • math.fabs(x):返回 x 的绝对值,如 math.fabs(-3) 返回 3

2、os模块:

1、os.path.join(path, *paths):智能拼接路径,自动处理路径分隔符(如 / 或 \)

  • path:基础路径
  • *paths:可变参数,表示要拼接的多个路径组件
  • 返回值:拼接后的完整路径

例如:

os.path.join('dir', 'subdir', 'file.txt')  # 在 Unix 系统上返回 'dir/subdir/file.txt'

2、os.path.dirname(path):返回路径中的目录部分,如 os.path.dirname('/home/user/file.txt') 返回 /home/user

3、os.path.basename(path):返回路径中的文件名部分,如 os.path.basename('/home/user/file.txt') 返回 file.txt

4、os.path.exists(path):检查路径是否存在(文件或目录),返回布尔值

5、os.mkdir(path):创建单个目录,若目录已存在则报错

(4和5常常一起使用,先检查路径是否存在,如果不存在则创建一个目录)

if os.path.exists(path) == Falseos.mkdir(path0

6、os.listdir(path='.'):返回指定目录下的所有文件和子目录名(列表形式)

7、os.path.isfile(path) 和 os.path.isdir(path):分别判断指定路径是文件还是目录,在需要区分处理文件和目录的场景下(如文件备份、目录清理等操作)很关键

3、datatime模块:

  1. datetime.datetime.now():获取当前的日期和时间,返回一个 datetime 对象,例如可以将其赋值给变量后,再通过对象的属性获取年、月、日、时、分、秒等具体时间信息,用于记录操作发生的时间戳
  2. datetime.date:表示日期(年、月、日)。
  3. datetime.time:表示时间(时、分、秒、微秒)。
# 当前日期和时间
now = datetime.now()  # 返回 datetime 对象
print(f"当前日期时间:{now}")  # 输出:2023-10-15 14:30:45.123456
  1. datetime.datetime:表示日期和时间的组合。
# 创建指定日期和时间
dt = datetime(2023, 10, 15, 14, 30, 45)
print(f"指定日期时间:{dt}")  # 输出:2023-10-15 14:30:45
  1. datetime.timedelta:表示两个时间点之间的差值

4、random

1. 随机浮点数生成
方法描述示例
random.random()生成 [0.0, 1.0) 范围内的随机浮点数random.random() → 0.7823456789
random.uniform(a, b)生成 [a, b] 范围内的随机浮点数random.uniform(1, 10) → 5.345678
2. 随机整数生成
方法描述示例
random.randint(a, b)生成 [a, b] 范围内的随机整数(含 a 和 brandom.randint(1, 6) → 3
random.randrange(start, stop[, step])从 range(start, stop, step) 中随机选择一个整数random.randrange(0, 100, 2) → 4
3. 种子控制
 
方法描述示例
random.seed(a=None)设置随机数生成器的种子,使结果可复现random.seed(42); random.random() → 固定输出 0.6394267984578835

5、time模块

  • time.time():返回从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间的时间戳(以秒为单位),常用于计算程序执行时间、记录事件发生的时间点等场景,比如在程序开始和结束处分别调用 time.time(),然后相减就能得到程序的运行时长。
  • time.sleep(seconds):让程序暂停执行指定的秒数,常用于模拟耗时操作、控制程序执行频率等,例如在循环中每次执行完一轮操作后,使用 time.sleep(1) 暂停 1 秒,避免过于频繁地执行操作,或者在多线程 / 多进程编程中,让不同线程 / 进程按照一定时间间隔交替执行。
  • time.strptime(string[, format]):将时间字符串按照指定的格式解析为时间元组,与 strftime 相反,常用于将外部输入的时间字符串转换为 Python 可处理的时间格式,例如 time.strptime('2024-01-01 12:00:00', '%Y-%m-%d %H:%M:%S') 会把给定的时间字符串解析为对应的时间元组结构,方便后续进一步处理。

(二)第三方模块

numpy 模块

功能概述:是 Python 数据科学领域的核心基础库,提供了高效的多维数组对象(ndarray)以及对这些数组进行各种数学运算、线性代数操作、随机数生成等功能的函数,极大地简化了数值计算相关的代码编写,提升了计算效率,广泛应用于科学计算、数据分析、机器学习等多个领域。

  • 常用方法示例
    • np.array([data]):创建一个 ndarray 对象,例如 np.array([1, 2, 3]) 会创建一个一维数组,而 np.array([[1, 2], [3, 4]]) 则创建一个二维数组,是后续进行各种数值运算的基础数据结构。
    • np.mean(array):计算数组的平均值,无论是一维数组还是多维数组都能方便地计算其均值,如 arr = np.array([1, 2, 3, 4]); np.mean(arr) 会返回数组元素的平均值,对于多维数组还可以指定维度参数来计算不同维度上的均值。
    • np.dot(a, b):用于计算两个数组的点积(对于二维数组来说相当于矩阵乘法),在向量运算、线性回归等机器学习算法的实现中经常用到,例如 a = np.array([1, 2]); b = np.array([3, 4]); np.dot(a, b) 会返回两个向量的点积结果。
pandas 模块

功能概述:专门用于数据处理和分析,提供了高性能、易用的数据结构(如 DataFrame 和 Series),可方便地进行数据读取、清洗、转换、分析以及可视化准备等操作,是数据分析师、数据科学家处理结构化数据的得力工具,大大提高了数据处理的效率和便捷性。

  • 常用方法示例
    • pd.read_csv('file.csv'):从 CSV 文件中读取数据并创建一个 DataFrame 对象,支持多种格式参数设置,用于适配不同的数据格式和编码等情况,方便导入外部数据进行后续分析,类似的还有 read_excelread_json 等方法用于读取不同格式的数据文件。
    • df.dropna():用于删除含有缺失值(NaN)的行或列(可通过参数指定),在数据清洗阶段经常用到,确保数据的完整性和准确性,便于后续准确地进行数据分析和建模,例如处理从实际采集的数据中可能存在的部分缺失值情况。
    • df.groupby('列名').sum():按照指定的列进行分组,并对其他数值列进行求和操作,这是 pandas 强大的数据分组聚合功能体现,常用于按类别统计数据总量、平均值等分析场景,比如按不同地区对销售额数据进行分组求和,查看各地区的销售总额情况。
matplotlib 模块

功能概述:是 Python 中最常用的数据可视化库,能够创建各种类型的图表(如折线图、柱状图、散点图、饼图等),支持对图表的各种元素(标题、坐标轴标签、图例等)进行自定义设置,帮助开发者将数据以直观易懂的图形方式展示出来,便于发现数据规律、进行结果汇报等。

  • 常用方法示例
    • plt.plot(x, y):用于绘制折线图,其中 x 和 y 分别为横纵坐标的数据序列,例如 x = [1, 2, 3]; y = [4, 5, 6]; plt.plot(x, y) 会绘制出一条简单的折线图,展示 x 和 y 数据之间的关系,常用于展示随时间变化的数据趋势等场景。
    • plt.bar(x, height):绘制柱状图,x 表示柱子的位置,height 表示柱子的高度,像展示不同类别数据的数量对比时就可以使用柱状图,例如 categories = ['A', 'B', 'C']; values = [10, 20, 15]; plt.bar(categories, values) 会绘制出相应的柱状图直观对比各分类的数据大小。
    • plt.title('图表标题')plt.xlabel('x轴标签')plt.ylabel('y轴标签'):分别用于设置图表的标题以及横纵坐标的标签,让图表更具可读性和表意清晰,完善可视化展示效果,使其更易于理解和解读。
requests 模块

功能概述:简化了 HTTP 请求的发送过程,使得 Python 程序能够方便地与网络服务进行交互,支持发送 GET、POST 等多种请求方法,能轻松处理请求的响应内容(如获取 JSON 数据、文本内容等),广泛应用于网络爬虫、调用 API 获取数据等需要与网络资源交互的场景。

  • 常用方法示例
    • requests.get(url, params=None, headers=None):发送 GET 请求到指定的 url,可以通过 params 参数传递查询参数(以字典形式),headers 参数设置请求头(模拟浏览器等情况),例如 response = requests.get('https://www.example.com/api', params={'key': 'value'}, headers={'User-Agent': 'Mozilla/5.0'}),常用于获取网页内容、查询公开 API 数据等场景,获取响应后可进一步通过 response.text (获取文本内容)或 response.json() (获取 JSON 格式数据并解析为 Python 对象)等方式处理返回的数据。
    • requests.post(url, data=None, json=None, headers=None):发送 POST 请求,data 参数可用于传递表单数据(字典形式),json 参数用于直接传递 JSON 格式的数据,常用于向服务器提交数据的场景,比如向登录接口提交用户名和密码、向数据上传接口发送要保存的数据等。
http://www.lryc.cn/news/592678.html

相关文章:

  • Docker部署前后端分离项目——多项目共享环境部署
  • Android sdk 升级 34到35
  • 计算机“十万个为什么”之跨域
  • c语言笔记---结构体
  • 一个简单的带TTL的LRU的C++实现
  • windows终端美化(原生配置+Oh My Posh主题美化)
  • 数据交易“命门”:删除权与收益分配的暗战漩涡
  • 《通信原理》学习笔记——第四章
  • LP-MSPM0G3507学习--05中断及管脚中断
  • 【DPDK】高性能网络测试工具Testpmd命令行使用指南
  • ELK结合机器学习模型预测
  • mysql not in 查询引发的bug问题记录
  • RV126平台NFS网络启动终极复盘报告
  • Python网络爬虫之selenium库
  • cocosCreator2.4 Android 输入法遮挡
  • Nginx配置Spring Boot集群:负载均衡+静态资源分离实战
  • 【时时三省】(C语言基础)通过指针引用字符串
  • cartorgapher的编译与运行
  • 群晖中相册管理 immich大模型的使用
  • 更适合后端宝宝的前端三件套之CSS
  • Node.js链接MySql
  • 前端笔记之 async/await 异步编程详解
  • 反射机制的登录系统
  • MyUI会员排名VcMember组件文档
  • Java并发编程痛点解析:从底层原理到实战解决方案
  • Axure RP 10 预览显示“无标题文档”的空白问题探索【护航版】
  • 【密码学】1. 引言
  • vue3引入cesium完整步骤
  • 深入Java注解:从内置到元注解与自定义实战指南
  • STM32-CAN