Python 模块化编程全解析:模块、包与第三方库管理指南

模块与包

模块化编程是什么?用生活例子秒懂

想象你在搭乐高积木:

  • 每个小积木块都有特定功能(比如轮子、窗户、墙壁)—— 这就像模块(一个.py 文件,封装了函数或类)。
  • 把相关的积木块装进一个盒子里,方便分类和取用 —— 这就像(一个文件夹,里面装多个模块和子包,带__init__.py 标识)。

模块化编程的核心思想是:把复杂代码拆成小而独立的 "积木",需要时直接拿来用,不用重复造轮子

1.模块的概念

        模块就是一个.py为后缀的python文件,可以被其它Python程序导入和使用,也可以自己独立运行,里面存放着的是一组相关函数或者类。

1.1模块的导入

        模块的导入使用import关键字,配合from和as有以下几种用法:

导入方式语法示例适用场景
导入整个模块import math需要用模块里的多个功能,用模块名.功能调用
导入模块并取别名import numpy as np模块名太长(如 numpy→np),简化代码
导入模块中的特定功能from os import getcwd只需要模块里的 1-2 个功能,避免代码冗余
导入特定功能并取别名from datetime import datetime as dt功能名太长或避免冲突
导入模块中所有功能from random import *

        import会把整个文件都导入进来,而使用from后可以只导入某一个模块,节省空间

示例

# 1. 导入整个模块
import math
print(math.sqrt(16))  # 用模块名.功能调用 → 4.0# 2. 别名简化
import pandas as pd  # 约定俗成的别名,大家都这么用
df = pd.DataFrame({"name": ["Alice"]})  # 用别名调用# 3. 导入特定功能
from os import getcwd, chdir
print(getcwd())  # 直接用功能名 → 输出当前目录# 4. 功能取别名
from datetime import datetime as dt
print(dt.now())  # 用别名调用 → 输出当前时间# 5. 导入所有功能(谨慎使用)
from random import *
print(randint(1, 10))  # 直接用函数名 → 随机1-10的整数

1.2模块的作用

  • 令Python代码的编写不必从零开始,不要重复写‘造轮子’的过程。
  • 避免同意模块内的命令冲突
  • 方便代码的管理与维护,提高代码的可读性

1.3模块的分类:内置、第三方、自定义

1.3.1内置模块(系统模块)

        Python解释器自带的标准库模块,可以直接导入使用,比如 keyword、os等,这些模块可直接导入而不需要安装,在所有安装了Python 解释器的电脑上都可以运行且每个py文件都会自动导入builtins模块。

特点

  • 即用即导入:直接import即可使用。

  • 性能高效:通常使用 C 语言实现。

1.3.1.1常见模块
模块功能官方文档
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.3.1.2方法示例 
  • random模块:
import random
random.randint(1, 6)  # random.randint(a,b) 生产 a~b的随机整数
random.randint(1, 6)
random.random()   # random.random  生成包含0 但不包含1 的浮点数
random.choice("ABCD")    # 从一个序列中,随机返回一个元素
random.choice("ABCD")
L = [1, 2, 3, 6, 9]
random.choice(L)
random.shuffle(L)   # random.shuffer(x)  # 把列表X 打乱
print(L)
  •  time模块
import timetime.time()  # 返回当前时间的时间戳
time.ctime()  #返回当前的UTC 时间的字符串
t1 = time.localtime()  # 返回当前的本地时间元组
time.sleep(3)  # 让程序睡眠 n 秒
time.strftime("%Y-%m-%d", t1)  # 格式化时间
time.strftime("%y-%m-%d", t1)
time.strftime('%Y-%m-%d %H:%M:%S', t1)
  •  os模块:
# 1. os.getcwd(): 获取当前工作目录
import os
current_directory = os.getcwd()
print("当前工作目录:", current_directory)# 2. os.chdir(path): 改变当前工作目录
new_directory = "F:\\01.AI07.深度学习框架\\00.上课课件"
os.chdir(new_directory)
print("工作目录已更改为:", os.getcwd())# 3. os.listdir(path='.'): 返回指定目录下的所有文件和目录列表
directory_path = "."
files_and_dirs = os.listdir(directory_path)
print("指定目录下的文件和目录列表:", files_and_dirs)# 4. os.mkdir(path): 创建目录
new_directory = "new_folder"
os.mkdir(new_directory)
print(f"目录 '{new_directory}' 已创建")# 5. os.rmdir(path): 删除目录
directory_to_remove = "new_folder"
os.rmdir(directory_to_remove)
print(f"目录 '{directory_to_remove}' 已删除")# 6. os.remove(path): 删除文件
file_to_remove = "example.txt"
os.remove(file_to_remove)
print(f"文件 '{file_to_remove}' 已删除")

1.3.2第三方模块

        由其他开发者开发且需要通过包管理工具(pip)安装的模块,比如Numpy、Pandas等库,如果有代码需要放到别的电脑上运行,那么这个电脑也需要先安装用到的第三方库才可以正常运行。
1.3.2.1常见模块 
模块功能示例
numpy数值计算科学运算、矩阵操作
pandas数据分析数据清洗与处理
matplotlib数据可视化绘制图表
requestsHTTP请求处理爬取网页内容,调用API
flaskWeb应用框架快速搭建Web服务
1.3.2.2使用示例 

安装更新与卸载

安装
pip install  numpy  pandas requests
更新
pip install numpy  pandas requests
卸载
pip uninstall  numpy  pandas requests

使用

  • numpy 模块
import numpy as np
array = np.array([1, 2, 3])
print(array.mean())  # 输出: 平均值 2.0
  • pandas 模块
import pandas as pd
df = pd.DataFrame({"Name": ["Alice", "Bob"], "Age": [25, 30]})
print(df)
  •  requests 模块:用requests爬取网页内容
import requests# 发送请求获取网页内容
response = requests.get("https://api.github.com")  # 调用GitHub开放API# 打印结果(JSON格式)
print(response.json())  # 输出:GitHub API的返回数据(字典形式)

1.3.3自定义模块

        用户根据需求自己编写的.py文件。

1.3.3.1创建模块

        创建一个myutils.py文件:

# utils.py
def add(a, b):return a + bdef greet(name):return f"Hello, {name}!"
1.3.3.2 使用模块

        创建一个main.py文件,并导入自定义模块:

# main.py
import myutilsprint(myutils.add(3, 5))  # 输出: 8
print(myutils.greet("Alice"))  # 输出: Hello, Alice!
1.3.3.3 跨文件夹使用

        在main.py中:

'''
假设目录结构如下:
project/utils/__init__.pymath_utils.pymain.py
'''
from utils.math_utils import addprint(add(3, 5))  # 输出: 8

 

1.4模块内置变量

        可通过dir()查看模块的内置变量:
  • __name__:用于确定模块是被直接运行还是被导入到其他模块中。当一个模 块被直接运行时,__name__的值是”__main__”,否则为模块的名称。
  • __doc__:包含模块的说明性文档。
  • __file__:包含模块的文件路径。
  • __all__:定义一个模块中的哪些变量、函数或类可以通过from module import *导入时可以用。
  • __package__:包含模块所在的包的名称。
  • __dict__:包含模块的全局命名空间。

2.包的概念

        就是一个有层次的文件目录结构,用来更好的组织和管理模块。通俗的说就 是一个目录,里面存放python文件和新的包目录,并且每一个包目录都需要存在 一个__init__.py文件,__init__.py文件可以没有内容,但必须有这个文件。
  • 作用:用于组织模块的集合,形成层次化的结构,便于管理大型项目。

  • 结构:

    my_package/__init__.pymodule1.pymodule2.pysubpackage/__init__.pymodule3.py
        注意:__init__.py文件在Python3.3版本后其实就不用在创建了,但是为了不同 版本下的代码兼容,建议还是创建,且PyCharm会自动创建。

2.1__init__.py文件的主要作用:

  • 标识包目录:告诉Python解释器该文件所在的目录应被视为一个包而不是一 个普通的目录。如果没有这个文件,可能会无法正常导入包内的模块。
  • 执行初始化代码:在该文件中也可以存在代码,在调用该包里的模块时,该文 件里的代码也会被运行。
  • 控制包的导入行为:通过__all__来控制哪些模块可以被导入,从而限制包的公 开接口,防止不需要的模块导入。
  • 提供包级别的命名空间:在该文件中定义的变量和函数可以在包的其他模块中 共享。
  • 批量导入模块:在该文件中可以批量导入系统模块或其他模块。

示例:

# __init__.py 文件示例# 1. 批量导入系统模块
import os
import sys
import datetime# 2. 定义包级别的变量
package_variable = "This is a package variable"# 3. 控制包的导入行为
__all__ = ['module1', 'module2']# 4. 执行初始化代码
print("Initializing mypackage")# 注意:这个代码会在包被导入时执行# 5. 导入包内的模块
from . import module1
from . import module2

2.2导入包和子包

  • 使用import关键字可以导入包和子包,以访问其中的模块和内容。

    # 同模块的导入规则import 包名 [as 包别名]import  包名.模块名 [as 模块新名]import  包名.子包名.模块名 [as 模块新名]from 包名 import 模块名 [as 模块新名]from 包名.子包名 import 模块名 [as 模块新名]from 包名.子包名.模块名 import 属性名 [as 属性新名]# 导入包内的所有子包和模块from 包名 import *from 包名.模块名 import *

 示例:

# 导入包中的模块
import matplotlib.pyplot as plt# 导入子包中的模块
from sklearn.linear_model import LinearRegression

2.3第三方包的相关操作:

安装
pip install package-name==version
更新
pip install –upgrade package-name
卸载
pip uninstall package-name

2.4包的创建

        新建一个Python软件包,就是创建了一个包,里面自带__init__.py文 件,只需要将写好的模块或包放入进去或直接在里面创建模块或即可。

3.模块与包的区别

模块
一个Python文件一个包含__init__.py的文件夹
提供基本功能单元用于组织多个模块
文件名为.py目录名

 

4. 解析顺序

        在使用 import module_name时,Python 会按照特定顺序搜索并加载模块。

4.1 模块解析顺序

查找优先级查找位置说明
1️⃣ 内置 C 扩展模块sys.builtin_module_namesmath, sys, time, os
2️⃣ sys.modules 缓存sys.modules避免重复加载
3️⃣ 当前目录os.getcwd()同名文件或目录
4️⃣ PYTHONPATH 变量sys.path环境变量指定的路径
5️⃣ Python 标准库/usr/lib/python3.x/Lib/标准 Python 库
6️⃣ site-packages(第三方库)site.getsitepackages()pip install 安装的模块
7️⃣ __pycache__/*.pyc__pycache__/预编译字节码

 

4.2 内置C扩展模块

        最高优先级,Python 直接加载,不查找文件

4.3 sys.modules

        如果模块已加载,则直接返回,避免重复导入

import sys
print(sys.modules.keys())  # 查看已加载的模块

4.4 当前目录

        如果 C 扩展模块中找不到,就查找当前目录下是否有 module_name.py 或 module_name 目录

import os
print(os.getcwd())  # 查看当前目录

4.5 PYTHONPATH

        如果当前目录没有该模块,则检查 $PYTHONPATH$ 环境变量中的目录

import sys
print(sys.path)  # 列出所有可能的搜索路径sys.path.insert(0, "/custom/path/")  # 添加路径

4.6 标准库

如果前面路径都找不到,会查找标准库中的模块。

4.7 第三方模块

最后,进入 site-packages 目录查找安装的第三方模块。

import site
print(site.getsitepackages())

4.8 __pycache__/

        从__pycache__/目录中加载 .pyc 文件,而不是重新解析 .py 文件。

        你可以删除 __pycache__/ 让 Python 重新编译 .py。

5.总结:模块化编程的核心价值

        模块化编程让Python代码从"一团乱麻"变成"井然有序的积木":  

  • - 代码复用:写一次功能,到处调用,不用重复劳动。  
  • - 易于维护:模块独立,改一处不影响其他部分。  
  • - 团队协作:多人分工写不同模块,最后像拼积木一样组合。  

        记住:学好模块和包,是从"写脚本"到"开发项目"的关键一步。下次写代码时,试试把常用功能拆成模块——你会发现代码变得清爽又好维护!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89279.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小白学Python,网络爬虫篇(2)——selenium库

前言 selenium 库是一种用于 Web 应用程序测试的工具,它可以驱动浏览器执行特定操作,自动按照脚本代码做出单击、输入、打开、验证等操作,支持的浏览器包括 IE、Firefox、Safari、Chrome、Opera 等。 与 requests 库不同的是,se…

Java安全:SpringBoot项目中Fastjson组件的使用与安全实践

前言 Fastjson是阿里巴巴开源的一个高性能Java JSON库,广泛用于Java对象的序列化和反序列化操作。在SpringBoot项目中,Fastjson常被用作JSON处理工具。然而,Fastjson因其高性能而广受欢迎的同时,也因多次爆出的安全漏洞而备受关注…

x的平方根

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用示例 1:输入:x 4 输出:2示例 2:输入&#xff1…

oracle服务器定时备份Windows Server

-- 创建目录对象(若未创建),先建立对应文件夹才能用目录对象CREATE OR REPLACE DIRECTORY dp_dirbackup AS D:\BACKUP; --配置路径 GRANT READ, WRITE ON DIRECTORY dp_dirbackup TO 用户名; --配置用户权限-- 备份脚本(保存为每…

HTML data-* 属性 自定义属性

data-* 属性用于存储私有页面后应用的自定义数据。 data-* 属性可以在所有的 HTML 元素中嵌入数据。 自定义的数据可以让页面拥有更好的交互体验(不需要使用 Ajax 或去服务端查询数据)。 data-* 属性由以下两部分组成:1. 属性名不要包含大写字…

Oracle 大页配置use_large_pages 参数解析

一、前因 再给一位客户的Exdata 2 节点 RAC 19C版本创建数据库并配置好优化参数后,客户一天发来一份健康检查报告,打开一看 use_large_pages 配置异常。 回想安装部署时特意确认了在db启动大页已经生效,为何会有此异常告警项? 二…

迅为八核高算力RK3576开发板摄像头实时推理测试 ppyoloe目标检测

RK3576处理器迅为iTOP-3576开发板采用瑞芯微RK3576高性能、低功耗的应用处理芯片,集成了4个Cortex-A72和4个Cortex-A53核心,以及独立的NEON协处理器。它适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品。NPU高达6TOPS算力支持INT4/INT8/INT…

纯CSS轮播

纯CSS轮播 在现代网页设计中,轮播组件是一种常见的用户界面元素,广泛应用于展示图片、产品信息等内容。本文将详细介绍如何使用纯 HTML/CSS 和少量 JavaScript 实现一个功能完备的 CSS Scroll Snap 轮播组件。该组件不仅支持原生左右拖拽滚动&#xff0c…

从零开始的云计算生活——番外3,LVS+KeepAlived+Nginx高可用实现方案

目录 前言 一、环境搭建 1.环境准备 2.安装ipvsadm和keepalived(Lvs服务器),nginx服务器安装nginx 3.为两台RS配置虚拟ip(nginx服务器) 1.配置虚拟网络子接口 2.ARP响应级别与通告行为的概念 3.配置ARP 二、Ke…

100201组件拆分_编辑器-react-仿低代码平台项目

文章目录1 设计UI,组件拆分2 实现关于1 设计UI,组件拆分 编辑器整体如上图所示,重点关注: flex弹性布局 上 左中右 下 左中右 画布居中画布Y轴滚动 2 实现 src/pages/question/Edit/index.tsx代码如下: import { …

CS课程项目设计2:交互友好的五子棋游戏

上次给大家分享了井字棋游戏的设计流程 CS课程项目设计1:交互友好的井字棋游戏-CSDN博客https://blog.csdn.net/weixin_36431280/article/details/149309500?spm1001.2014.3001.5501今天打算再分享进阶版井字棋游戏的版本设计——五子棋游戏。五子棋游戏操作方式与…

如何用山海鲸轻松构建3D智慧大屏?

一、什么是3D可视化大屏? 3D可视化大屏是一种结合了三维(3D)图形技术与数据可视化技术的信息展示平台,它通过在大型屏幕上以三维立体的形式呈现复杂的数据和信息,为用户提供直观、生动的视觉体验。这种技术将抽象的数…

牛客网 SQL 刷题(全部题目,最优解,复杂题有讲解)

刷题网址:https://www.nowcoder.com/exam/oj?questionJobId10&subTabNameonline_coding_page有时主页显示的题目序号与点进去之后的题目序号有所不同,这里以点进去之后的题目序号为主,如果日后还是有所出入,可以凭题目名称找…

Linux 系统管理基础教程

一、引言在 Linux 系统中,系统管理是一项至关重要的任务,它涉及到进程和服务的管理、系统运行级别的控制以及关机重启等操作。本文将详细介绍 Linux 系统管理的基础知识,帮助读者更好地理解和掌握 Linux 系统的管理技巧。二、Linux 中的进程和…

如何实战应用快鲸aiseo提升百度搜索排名?

百度搜索排名优化策略 百度搜索排名的提升,是企业获取在线可见性与自然流量的核心目标。有效的优化策略需基于对百度搜索算法原理的深入理解,遵循其重视内容质量与用户体验的核心准则。具体而言,这涉及构建完善的网站技术架构以确保高效爬取与…

element-plus——图标推荐

以下是 Element Plus 中适合编辑页面使用的图标组件示例:<!-- 编辑相关 --> <el-icon><Edit /></el-icon> <!-- 基础编辑图标 --> <el-icon><EditPen /></el-icon> <!-- 钢笔样式编辑图标 --&g…

黄仁勋链博会首秀:中国开源AI催化全球革命,机器人浪潮重塑未来工厂

7月16日&#xff0c;北京链博会开幕式迎来一位特殊演讲者——英伟达创始人黄仁勋身着唐装&#xff0c;首次以中文登台演讲。这位AI芯片巨头的掌舵人坦言“很紧张”&#xff0c;却清晰传递出一个重要观点&#xff1a;中国的开源AI已成为世界进步的催化剂&#xff0c;让每个国家、…

uniapp云托管前端网页

uniCloud控制台 实名认证

27、鸿蒙Harmony Next开发:ArkTS并发(Promise和async/await和多线程并发TaskPool和Worker的使用)

目录 异步并发 (Promise和async/await) Promise async/await 多线程并发 多线程并发模型 内存共享模型 Actor模型 TaskPool TaskPool运作机制 TaskPool注意事项 Concurrent装饰器 装饰器说明 装饰器使用示例 TaskPool扩缩容机制 扩容机制 缩容机制 Worker Wo…

Web前端:JavaScript鼠标事件

1. onclick&#xff08;鼠标单击事件&#xff09;触发条件&#xff1a;用户用鼠标左键单击元素时触发使用场景&#xff1a;按钮操作、菜单展开/关闭、提交表单等示例代码&#xff1a;<button id"myButton">点击我</button> <script>document.getEl…