news 2026/5/7 1:14:31

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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如何找到要导入的模块。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 1:14:28

利用 taotoken 为内部知识库问答系统提供多模型后备支持

利用 Taotoken 为内部知识库问答系统提供多模型后备支持 1. 多模型后备架构的价值 在企业内部知识库问答系统的运行过程中&#xff0c;单一模型依赖存在潜在风险。当主用模型因流量激增或性能波动导致响应延迟时&#xff0c;系统可用性将受到影响。通过 Taotoken 平台接入多个…

作者头像 李华
网站建设 2026/5/7 1:10:29

纯前端实现个性化鼠标指针:从CSS cursor属性到30+主题库实战

1. 项目概述&#xff1a;从零打造一套个性化鼠标指针你是否已经厌倦了电脑屏幕上那个千篇一律的白色箭头&#xff1f;在浏览网页、处理文档时&#xff0c;一个独特的鼠标指针不仅能彰显个性&#xff0c;还能为日常的数字生活增添不少趣味。今天&#xff0c;我想分享一个我最近完…

作者头像 李华
网站建设 2026/5/7 1:01:50

航测新手避坑指南:用Metashape做DOM时,建筑物拉花、扭曲怎么解决?

航测数据处理实战&#xff1a;解决Metashape中DOM建筑物扭曲的7个关键步骤 第一次看到自己生成的DOM里那些扭曲变形的建筑物时&#xff0c;我盯着屏幕愣了半天——明明是按照教程一步步操作的&#xff0c;为什么高楼像被无形的手拧成了麻花&#xff1f;这种"建筑物拉花&qu…

作者头像 李华