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

Python快速学习——第11章:模块

第十一章:模块

11.1 什么是模块?

模块就像一个装满工具的箱子,每个模块都包含了一组相关的函数变量,可以帮助我们组织代码,实现代码的复用。Python中的模块实际上就是一个.py文件。

# 使用内置math模块。importmath;# 使用math模块中的函数。print(math.sqrt(16));# 4.0。print(math.pi);# 3.141592653589793。

11.2 为什么使用模块?

11.2.1 代码组织

模块帮助我们将代码分成逻辑单元:

my_project/ ├── main.py ├── utils/ │ ├── __init__.py │ ├── file_utils.py │ └── math_utils.py └── models/ ├── __init__.py ├── user.py └── product.py

11.2.2 代码复用

避免重复编写相同的代码:

# 在不同项目中重用工具函数fromutils.math_utilsimportcalculate_average scores=[85,92,78,90,88]average=calculate_average(scores)print(f"平均分:{average}")

11.2.3 命名空间管理

避免命名冲突:

importmathimportstatistics# 不同模块可以有相同名称的函数math.mean([1,2,3])# math模块的mean函数statistics.mean([1,2,3])# statistics模块的mean函数

11.3 导入模块的方式

11.3.1 基本导入

# 导入整个模块。importmath;print(math.sqrt(25));# 导入模块并指定别名。importmathasm;print(m.sqrt(25));# 导入特定函数/类。frommathimportsqrt,pi;print(sqrt(25));print(pi);# 导入所有内容(不推荐,可能导致命名冲突)。frommathimport*;print(sqrt(25));

运行结果:

5.05.05.03.1415926535897935.0

11.3.2 相对导入(在包内部)

在包内部的模块中使用相对导入:

# 在 utils/math_utils.py 中from.importfile_utils# 导入同级的file_utils模块from..modelsimportuser# 导入上级models包中的user模块

11.4 Python标准库常用模块

11.4.1 math - 数学运算

importmath# 基本数学函数print(math.ceil(4.2))# 5 - 向上取整print(math.floor(4.8))# 4 - 向下取整print(math.fabs(-5))# 5.0 - 绝对值print(math.factorial(5))# 120 - 阶乘# 幂和对数print(math.pow(2,3))# 8.0 - 幂运算print(math.sqrt(16))# 4.0 - 平方根print(math.log(100,10))# 2.0 - 对数# 三角函数print(math.sin(math.pi/2))# 1.0print(math.cos(math.pi))# -1.0# 常数print(math.pi)# 3.141592653589793print(math.e)# 2.718281828459045

11.4.2 random - 随机数

importrandom# 生成随机数print(random.random())# 0.0到1.0之间的随机浮点数print(random.uniform(1,10))# 1到10之间的随机浮点数print(random.randint(1,6))# 1到6之间的随机整数(包括6)# 序列操作fruits=["苹果","香蕉","橙子","葡萄"]print(random.choice(fruits))# 随机选择一个元素print(random.sample(fruits,2))# 随机选择2个不重复的元素random.shuffle(fruits)# 打乱序列顺序print(fruits)

11.4.3 datetime - 日期时间

importdatetime# 获取当前时间now=datetime.datetime.now()print(f"当前时间:{now}")print(f"年份:{now.year}")print(f"月份:{now.month}")print(f"日期:{now.day}")# 创建特定日期birthday=datetime.datetime(1990,5,15)print(f"生日:{birthday}")# 时间计算tomorrow=now+datetime.timedelta(days=1)print(f"明天:{tomorrow}")# 日期格式化formatted=now.strftime("%Y-%m-%d %H:%M:%S")print(f"格式化时间:{formatted}")# 字符串转日期date_str="2023-12-25"christmas=datetime.datetime.strptime(date_str,"%Y-%m-%d")print(f"圣诞节:{christmas}")

11.4.4 os - 操作系统接口

importos# 文件和目录操作print(os.getcwd())# 获取当前工作目录# 创建目录os.makedirs("my_folder/sub_folder",exist_ok=True)# 列出目录内容print(os.listdir("."))# 当前目录内容# 检查路径是否存在print(os.path.exists("my_folder"))# True# 路径操作file_path=os.path.join("my_folder","sub_folder","file.txt")print(f"文件路径:{file_path}")# 环境变量print(os.environ.get("PATH","未找到PATH环境变量"))

11.4.5 sys - 系统相关参数

importsys# 命令行参数print(f"脚本名称:{sys.argv[0]}")print(f"参数列表:{sys.argv[1:]}")# Python解释器信息print(f"Python版本:{sys.version}")print(f"平台:{sys.platform}")# 退出程序iflen(sys.argv)<2:print("需要提供参数")sys.exit(1)# 非零退出码表示错误# 模块搜索路径print("模块搜索路径:")forpathinsys.path:print(f"{path}")

11.4.6 json - JSON数据处理

importjson# Python对象转JSON字符串data={"name":"张三","age":25,"courses":["数学","英语","编程"],"is_student":True}json_str=json.dumps(data,ensure_ascii=False,indent=2)print("JSON字符串:")print(json_str)# JSON字符串转Python对象parsed_data=json.loads(json_str)print(f"姓名:{parsed_data['name']}")# 读写JSON文件withopen("data.json","w",encoding="utf-8")asf:json.dump(data,f,ensure_ascii=False,indent=2)withopen("data.json","r",encoding="utf-8")asf:loaded_data=json.load(f)print(f"从文件加载:{loaded_data['name']}")

11.5 创建自己的模块

11.5.1 创建简单模块

创建一个名为my_math.py的文件:

# my_math.py"""一个简单的数学工具模块"""defadd(a,b):"""计算两个数的和"""returna+bdefmultiply(a,b):"""计算两个数的积"""returna*bdeffactorial(n):"""计算阶乘"""ifn==0:return1result=1foriinrange(1,n+1):result*=ireturnresult# 模块级别的常量PI=3.14159VERSION="1.0.0"

在其他文件中使用这个模块:

# main.pyimportmy_mathprint(my_math.add(5,3))# 8print(my_math.multiply(4,6))# 24print(my_math.factorial(5))# 120print(my_math.PI)# 3.14159

11.5.2 创建包

包是包含多个模块的目录,需要包含__init__.py文件:

my_package/ ├── __init__.py ├── math_utils.py └── string_utils.py

__init__.py文件可以是空文件,也可以包含初始化代码:

# my_package/__init__.py"""我的工具包"""from.math_utilsimportadd,multiplyfrom.string_utilsimportreverse_string __version__="1.0.0"__all__=['add','multiply','reverse_string']

11.6 模块的搜索路径

Python按照以下顺序搜索模块:

  1. 当前目录
  2. 环境变量PYTHONPATH指定的目录
  3. Python标准库目录
  4. 第三方库目录(site-packages)
importsys# 查看模块搜索路径forpathinsys.path:print(path)# 添加自定义路径sys.path.append("/path/to/my/modules")

本章笔记:

  • 模块是组织Python代码的基本单位,通常是一个.py文件。
  • 使用模块可以提高代码的可维护性、可重用性和可读性。
  • Python有多种导入模块的方式:import、from…import、别名导入等。
  • Python标准库提供了丰富的模块,如math、random、datetime、os等。
  • 可以创建自己的模块和包来组织代码。
  • 模块搜索路径决定了Python如何找到要导入的模块。
http://www.jsqmd.com/news/767082/

相关文章:

  • 工业机器人闭环控制系统的轨迹优化与采样权重分配
  • 【PI_浪涌电流】快速掌握电源浪涌电流(Inrush current)测试方法
  • 别再手动圈地物了!用Python+深度学习5步搞定遥感影像自动分类(附代码)
  • 宏智树AI如何让你的期刊论文从“卡壳“到“丝滑“?
  • 单目视觉乒乓球轨迹与旋转分析系统开发
  • DeepSORT实战:在YOLOv8检测器上集成多目标跟踪,提升安防监控效率
  • 数据库2表设计
  • 电压监控器原理与Microchip选型指南
  • 在 Ubuntu 上对接 Claude Code 编程助手并配置 Taotoken 作为后端
  • 基于MCP协议构建跨平台广告AI管理中枢:策略感知与自动化实战
  • 视频生成模型提升机器人操作泛化能力
  • 掌控散热:7个步骤彻底解决Windows风扇噪音与温度平衡难题
  • 探路者转型数据压缩核心赛道,辅助存储打开全新成长空间
  • 告别MAX6675?聊聊STM32热电偶测温的几种替代方案与选型思考
  • AI编程助手如何突破项目记忆盲区:codebase-intel实战指南
  • 基于视觉语言模型的UI设计稿自动代码生成实践
  • 利用 taotoken 为内部知识库问答系统提供多模型后备支持
  • 9块9的合宙1.8寸ST7735S彩屏,用ESP32C3驱动避坑全记录(附代码)
  • 别再录屏了!用MATLAB的getframe和imwrite函数,5分钟搞定论文里的动态图
  • 基于区块链的频谱共享智能合约【附代码】
  • 超分算法实战:用Real-ESRGAN+Pytorch训练你自己的动漫增强模型(避坑环境配置指南)
  • 别再死记硬背公式了!用大白话和Python模拟,带你搞懂激光的‘增益’与‘损耗’
  • Java游戏服务器框架ioGame:高性能架构与实战开发指南
  • 3步解锁B站视频下载神器:DownKyi全功能指南
  • 树莓派RP2350以太网开发板W5100S与W5500对比评测
  • Tailwind CSS如何自定义响应式断点_修改tailwind.config配置文件
  • PolyForge开源工具:基于QEM算法的3D模型网格简化实战指南
  • Java+AI<AI的使用与Java的基础学习-数组>
  • 【马聊】策划谈论
  • 网页3D重建与WebVR技术实践指南