Python零基础入门(十)——模块与包

news2024/11/17 4:23:56

系列文章目录

个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页
Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟
码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊


文章目录

  • 系列文章目录
  • 导语
  • 模块概述
  • 自定义模块
    • 创建模块
  • 引用模块
    • 使用 import 语句
    • 导入特定功能
    • 为模块或功能取别名
    • 模块搜索目录
  • 引用标准模块
  • 下载与安装第三方模块
    • 使用pip
  • 以主程序的形式执行
  • Python中的包
    • 创建包
    • 使用包
  • 结语

导语

欢迎来到本系列的第十篇文章!在前面的学习中,已经介绍了 Python 的基本语法、条件和循环语句、函数、以及面向对象编程等知识。今天,我们将继续扩展 Python 技能,学习有关模块与包的内容。模块与包是 Python 中非常重要的概念,它们能够帮助组织和管理代码,提高代码的复用性和可维护性。

模块概述

Python 提供了强大的模块支持,主要体现为不仅在 Python 标准库中包含了大量的模块(称为标准模块),如 mathrandomdatetime 等,而且还有很多第三方模块,另外开发者自己也可以开发自定义模块

模块的英文是 Modules,可以认为是一盒主题积木,通过它可以拼出某一主题的东西。这与函数不同,一个函数相当于一块积木,而一个模块中可以包括很多函数,也就是很多积木,所以也可以说模块相当于一盒积木。

在 Python 中,一个扩展名为 “py” 的文件就称之为一个模块。通常情况下,把能够实现某一特定功能的代码放置在一个文件中作为一个模块,从而方便其他程序和脚本导入并使用。另外,使用模块也可以避免函数名和变量名冲突。

自定义模块

除了使用 Python 内置的模块外,也可以自己创建和使用自定义模块。自定义模块可以将一组相关的功能放在一个文件中,并在其他程序中进行引用。

创建模块

创建模块可以将模块中相关的代码(变量定义和函数定义等)编写在一个单独的文件中,并且将该文件命名为 “模块名+.py” 的形式,也就是说,创建模块,实际就是创建一个 .py 文件。

引用模块

Python 提供了多种方式来引用模块:

使用 import 语句

使用 import 语句可以导入整个模块,并使用模块中定义的功能。

import math

result = math.sqrt(25)
print(result)  # 输出 5.0

注意:使用 import 语句导入模块时,模块名是区分字母大小写的。

导入特定功能

如果只需要使用模块中的某个功能,可以使用 from ... import ... 语句。

from math import sqrt

result = sqrt(25)
print(result)  # 输出 5.0

为模块或功能取别名

在导入模块时,也可以为其取一个别名,方便使用。

import math as m
from math import sqrt as square_root

result = m.sqrt(25)
print(result)  # 输出 5.0

result2 = square_root(36)
print(result2)  # 输出 6.0

模块搜索目录

当使用 import 语句导入模块时,默认情况下,会按照以下顺序进行查找:

  • 1.内置模块:首先搜索内置的模块,例如 mathsys 等。
  • 2.当前工作目录:如果模块与当前脚本文件(或交互式会话)在同一目录下, 那么 Python 会优先从当前工作目录进行搜索。
  • 3.PYTHONPATH 路径:Python 会按照 PYTHONPATH 环境变量中声明的路径顺序逐个搜索。
  • 4.标准库路径:如果模块仍然未找到,则 Python 会搜索标准库的安装路径。
  • 5.错误:如果在以上步骤都找不到模块,则会抛出 ModuleNotFoundError 异常。

以上各个目录的具体位置保存在标准模块 syssys.path 变量中。可以通过以下代码输出具体的目录:

import sys				# 导入标准模块 sys
print(sys.path)			# 输出具体目录

执行上面的代码,将显示下图所示的结果。

在这里插入图片描述

引用标准模块

Python 内置了大约 200 多个标准模块,它们提供了丰富的功能和工具。下面是一个常用的 Python 标准模块及其功能:

模块名功能示例用途
math数学运算函数,如三角函数、指数对数、常量 π 等计算三角函数值、计算数学表达式
random生成随机数,如随机整数、随机选择、洗牌等随机数游戏、随机抽取样本数据
datetime处理日期和时间,如获取当前日期时间、格式化日期时间等日期时间处理、时间戳转换
os操作系统接口,如文件和目录操作、环境变量、进程管理等文件操作、目录遍历、环境变量读取
sys提供对解释器的访问,如命令行参数、标准输入输出等命令行参数解析、标准输入输出重定向
re正则表达式操作,用于字符串匹配和替换文本处理、数据提取
jsonJSON 数据编码和解码与其他系统交互、配置文件存储
csvCSV 文件读写数据处理、数据导入导出
urllibURL 处理和访问网络资源网络请求、网页爬虫
sqlite3SQLite 数据库操作数据存储、小型数据库应用
collections扩展的容器数据类型,如dequeCounterdefaultdict数据分析、数据处理
itertools提供用于高效循环的迭代器工具迭代操作、组合生成器
argparse命令行参数解析命令行工具、脚本参数配置
logging记录日志信息应用日志、调试信息输出
multiprocessing多进程编程,支持多进程和进程间通信并行处理、分布式计算

下载与安装第三方模块

除了 Python 内置的标准模块外,还有许多由 Python 社区贡献的第三方模块,可以为项目提供更多功能和特性。下面是常用的 Python 第三方模块及其功能:

模块名功能示例用途
requests发送 HTTP 请求,进行网络通信网络数据爬取、API调用
pandas数据处理和分析,提供 DataFrame 和 Series 数据结构数据清洗、数据分析、数据可视化
numpy科学计算和数值运算,提供多维数组和矩阵操作数值计算、线性代数运算
matplotlib绘制图表和可视化工具数据可视化、图表绘制
scipy科学计算工具集,提供数学、科学和工程计算数值计算、数据拟合、信号处理
beautifulsoup4解析 HTML 和 XML 文档,提取网页数据网页爬虫、网页数据提取
scrapy强大的网络爬虫框架大规模数据爬取、数据抓取
djangoWeb 应用开发框架构建Web应用、网站开发
flask轻量级 Web 应用开发框架快速构建Web应用、API服务
sqlalchemySQL 数据库的 ORM(对象关系映射)框架数据库操作、数据持久化
tensorflow深度学习框架机器学习、神经网络模型训练
pytorch深度学习框架,提供动态计算图机器学习、神经网络模型训练
keras高级神经网络 API,基于 TensorFlow 或 Theano快速构建和训练神经网络模型
nltk自然语言处理工具集文本处理、语言分析
opencv-python计算机视觉库,用于图像和视频处理图像处理、计算机视觉应用
selenium浏览器自动化测试工具网页自动化操作、Web 测试

要使用这些第三方模块,需要先下载并安装它们。

使用pip

pip 是Python的包管理器,可以用来下载和安装第三方模块。打开命令行终端,使用以下命令来安装一个名为 requests 的第三方模块:

pip install requests

这将从 Python 官方的 PyPI(Python Package Index)仓库中下载并安装 requests 模块。

由于 Python 官方的 PyPI 仓库位于国外,如果网络连接到 PyPI 缓慢,可以通过以下使用国内镜像源来快速下载:

国内有一些镜像源提供了 Python 第三方模块的镜像,可以加快下载速度。例如,清华大学提供了 PyPI 的镜像源。在终端中使用以下命令来更换为清华大学的 PyPI 镜像源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后,就可以在代码中导入并使用这个模块了。

如果想要查看 Python 中都有哪些模块(包括标准模块和第三方模块),可以在 IDLE 中输入以下命令:

help('modules')

如果只是想要查看已经安装的第三方模块,可以在命令行窗口中输入以下命令:

pip list

以主程序的形式执行

在 Python 中,可以将一个文件既作为模块引用,又可以作为独立的程序执行。这可以通过 if __name__ == "__main__": 来实现。

# my_module.py

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

if __name__ == "__main__":
    result1 = add(5, 3)
    print(result1)  # 输出 8

    result2 = subtract(10, 4)
    print(result2)  # 输出 6

当直接运行 my_module.py 时,if __name__ == "__main__": 块中的代码将会执行;而当这个文件作为模块被引用时,if __name__ == "__main__": 块中的代码将不会执行。

这是因为当 Python 解释器执行一个文件时,它会将特殊的变量 __name__ 设置为一个特定的值。如果一个文件是作为独立程序执行,那么 __name__ 的值将被设置为 "__main__";如果一个文件是被导入为模块使用,那么 __name__ 的值将是模块的名称。

Python中的包

包是一种包含模块的文件夹,它允许将相关的模块组织在一起。包含一个特殊的文件 __init__.py(可以是空文件)来表示这个文件夹是一个包。使用包的好处是更好地组织和管理模块,避免模块名称冲突,并且使代码结构更清晰。

创建包的目的不是为了运行,而是被导入使用,包只是模块的一种形式而已。

创建包

创建包实际上就是创建一一个文件夹,并且在该文件夹中创建一个名称为 __init__.py 的 Python 文件。在 __init__.py 文件中,可以不编写任何代码,也可以编写一些 Python 代码。在 __init__.py 文件中所编写的代码,在导入包时会自动执行。

例如,创建一个名为 my_package 的包,它的目录结构如下:

my_package/
    __init__.py
    module1.py
    module2.py
    subpackage/
        __init__.py
        module3.py

使用包

创建包以后,就可以在包中创建相应的模块,然后再使用import语句从包中加载模块。从包中加
载模块通常有以下3种方式:

  • 通过 “import +完整包名.模块名” 形式加载指定模块;
  • 通过 “from + 完整包名+ import + 模块名” 形式加载指定模块
  • 通过 “from + 完整包名.模块名 + import + 定义名” 形式加载指定模块

结语

本篇博客,介绍了 Python 中模块与包的概念、自定义模块、导入模块、以及以主程序形式执行代码。模块与包是 Python 中组织代码、实现复用性和可维护性的重要工具,希望你能在今后的编程中善于运用它们。感谢阅读,祝你编程愉快!

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

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

相关文章

【C语言-扫雷游戏全功能详解】

目录 理解扫雷原理 梳理扫雷过程 9*9 棋盘 初始化棋盘 显示棋盘 ​编辑 布置雷 排查雷 统计x,y坐标周围有几个雷 使用递归函数来实现周围没地雷时展开多个 判断成功排除后剩下的方格数是否等于地雷数 排查函数 梳理编写代码思路 头文件game.h 库函数所需要头文件 …

STM32 cubemx配置USART DMA传输

文章目录 前言一、DMA概念二、STM32 DMA数据手册分析3.DMA模式介绍4.cubemx配置总结 前言 本篇文章来讲解DMA的概念,并使用DMA来进行串口的数据收发。 一、DMA概念 DMA(Direct Memory Access,直接内存访问)是一种计算机系统的技…

vue 设置数组

手写获取数据 <el-form-item label"缴纳方"><el-select v-model"form.invoiceCategoryName" placeholder"请选择缴纳方"><el-optionv-for"item in kplmList":key"item.value":label"item.label":v…

求解方程x^2=a的根,不使用库函数直接求解(不动点迭代法)

首先可以将方程两边同时加上x&#xff0c;&#xff0c;这时候两边同时再除以1x&#xff0c;就得到了&#xff0c;变形为。&#xff08;变性后的迭代式不唯一&#xff0c;这里随便选取一个&#xff09; 当x是准确值的时候&#xff0c;两边应该是相等的&#xff0c;如果x是近似值…

数据库连接池的使用

十、数据库连接池的使用 1、c3p0数据库连接池 硬编码&#xff1a; c3p0的帮助文档 c3p0配置文件&#xff1a; 2、dbcp数据库连接池 配置文件&#xff1a; 3、druid 将上面三个做成工具类&#xff1a;

单网卡实现 双IP 双网段(内外网)同时运行

前提是内外网是同一网线连接&#xff08;双网线双网卡的具体可以自己搜索下。理论上都设置静态IP后把外网跃点设置小&#xff0c;内网跃点设置大&#xff0c;关闭自动跃点设置同一个接口跃点数&#xff0c;在通过命令提示符添加内网网址走内网网关就可以了&#xff09;。 需要使…

Mac 定时重启 TouchBar 脚本(缓解闪烁问题)

背景 Mac 笔记本 TouchBar 是真的脆啊&#xff0c;合盖使用一段时间就废了&#xff0c;右侧一直闪烁简直亮瞎眼 &#x1f602; 经过观察&#xff0c;总结出闪烁规律如下&#xff1a; 工作状态&#xff1a;不断操作电脑时&#xff0c;触控栏处于工作状态&#xff0c;几乎不闪…

Git分布式版本控制工具和GitHub(一)--简介

一.Git概述 1.Git简介 【1】什么是Git? Git就是代码版本管理工具。 【2】为什么要使用Git &#xff08;1&#xff09;版本控制 写代码就是不断写BUG的过程&#xff08;当然我们是不会这么说的&#xff09;&#xff0c;很多时候你写了100行代码之后&#xff0c;突然醒悟&…

APP自动化测试-Python+Appium+Pytest+Allure框架实战封装(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 pytest只是单独的…

Spring——更快捷的存储 / 获取Bean对象

文章目录 前言一、存储 Bean 对象类注解为什么有五个类注解使用类注解存储对象配置扫描路径(重中之重)添加注解存储 Bean 对象 方法注解配置扫描路径(重中之重)使用方法注解存储对象 二、获取 Bean 对象Autowired属性注入Setter注入构造方法注入 Resource 总结 前言 本人是一个…

day17-二叉树的迭代遍历

二叉树的迭代遍历 二叉树的递归遍历是比较简单的 前序中序后序 前序遍历 前序遍历代码如下&#xff1a; class Solution { public:vector<int> preorderTraversal(TreeNode* root) {vector<int> res;preorder(root,res);return res;}void preorder(TreeNode* …

进度条 Vue2 +PC端 ,点击页面加载时页面顶部的那个蓝条

提示&#xff1a; <div class"global-loading"> </div> css:less <style lang"less"> .global-loading {background-color: red;height: 10px;position: fixed;z-index: 999;width: 0;animation: grow 2s infinite forwards;}keyframe…

ROS从入门到精通6-8:costmap代价地图插件编写案例(prohibition_layer)

目录 0 专栏介绍1 为什么需要代价地图插件?2 自定义代价地图插件3 仿真测试0 专栏介绍 本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS进行实际项目的开发和调试的工程能力。 🚀详情:《ROS从入门到精通》 1 为什么需要代价地图插…

PHP: 开发入门macOS系统下的安装和配置

安装Homebrew 安装 ~~友情提示&#xff1a;这个命令对网络有要求&#xff0c;可能需要翻墙或者用你的手机热点试试&#xff0c;或者把DNS换成&#xff08;114.114.114.114 和 8.8.8.8&#xff09; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebr…

tensorRT模型性能测试

目录 前言1. 模型训练1.1 模型1.2 数据集1.3 xml2yolo1.4 yolo2json1.5 json2yolo1.6 训练 2. TRT模型转换2.1 YOLOv5 ONNX导出2.2 YOLOv6 ONNX导出2.3 YOLOv5 engine生成2.4 YOLOv6 engine生成 3. TRT模型测试3.1 YOLOv5 engine mAP测试3.2 YOLOv5 engine 速度测试3.3 YOLOv6 …

代码随香录算法训练营day16 | 104. 二叉树的最大深度,559. N 叉树的最大深度,111. 二叉树的最小深度,222. 完全二叉树的节点个数

目录 104. 二叉树的最大深度 559. N 叉树的最大深度 111. 二叉树的最小深度 222. 完全二叉树的节点个数 104. 二叉树的最大深度 学了回溯之后再来做一下 思路&#xff1a; 二叉树节点的深度&#xff1a;指从根节点到该节点的最长简单路径边的条数或者节点数&#xff08;取…

chatgpt 接口使用(一)

使用api实现功能 参考链接&#xff1a;https://platform.openai.com/examples 安装库&#xff1a; pip3 install openai 例如&#xff1a; import os import openaiopenai.api_key os.getenv("OPENAI_API_KEY") response openai.ChatCompletion.create(model&q…

Flutter:使用url_launcher打开外部浏览器、拨打电话、发送短信、打开第三方app、打开应用商店下载应用

前言 Flutter中的url_launcher是一个用于打开URL的插件。它允许在Flutter应用程序中打开网址、发送电子邮件、拨打电话等操作。使用url_launcher插件&#xff0c;可以轻松地在应用程序中集成各种URL操作。 官方地址 https://pub-web.flutter-io.cn/packages/url_launcher 安…

Oracle 时间多少秒以后 oracle interval 多少分钟之前 Oracle日期1小时后 Java时间多少秒以后 Java日期多少天之前

Oracle 时间多少秒以后 oracle interval 多少分钟之前 Oracle日期1小时后 Java时间多少秒以后 Java日期多少天之前 一、概述 在项目开发中&#xff0c;遇到一个类似于 超时关闭的订单&#xff08;超过1分钟后关闭订单&#xff09; 的需求&#xff0c;在数据的时间写入时&#x…

【Python机器学习】实验06 KNN最近邻算法

文章目录 KNN算法前言 距离度量(1) 欧式距离(2) 曼哈顿距离(Manhattan distance)(3) 切比雪夫距离(Chebyshev distance)(4) 闵可夫斯基距离(Minkowski distance)(5) 汉明距离(Hamming distance)(6) 余弦相似度(Cosine Similarity) KNN算法介绍1 数据的准备2 划分训练数据和测试…