02-9.python入门基础一Python模块与包(一)

一、Python 模块的概念

(一)模块的基本定义

在 Python 中,模块(Module)是一种组织代码的基本单元,简单来说,一个以 .py 结尾的 Python 文件就是一个模块。例如,我们创建一个名为 example.py 的文件,那这个文件就可以被视作一个模块。

在模块内部,可以包含各种各样的 Python 对象定义及语句,常见的如类(Class)、函数(Function)、变量(Variable)以及可执行的代码段等。比如,我们可以在一个模块里定义一个计算圆面积的函数:

def calculate_circle_area(radius):

    """

    该函数用于计算圆的面积,参数radius为圆的半径

    """

    import math

    return math.pi * radius ** 2

同时也可以定义相关的变量,像:

PI = 3.1415926

(二)模块的分类

Python 中的模块通常可以分为以下三大类:

Python 标准库(内置模块):

这是 Python 解释器自带的一些已经定义好的模块,它们是 Python 官方提供的,安装 Python 环境后就可以直接使用,无需额外安装其他东西。这些标准库涵盖了众多方面的功能,能满足很多常见的开发需求。

例如:

import time

print(time.time())  

time.sleep(2)  

print(time.ctime())  

from random import *

print(random())  

print(randint(1, 100))

print(randrange(1, 10))

time 模块:可以用于处理时间相关的操作,像获取当前时间戳(time.time() 函数,它返回从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间的秒数)、让程序暂停一段时间(time.sleep(seconds) 函数,其中 seconds 为需要暂停的秒数)以及将时间戳转换为可读的时间格式(如 time.ctime(timestamp) 可以把时间戳转换为固定格式的当前时间字符串)等。比如:

random 模块:主要用于生成各种随机数。比如 random.random() 可以生成一个 0 到 1 之间的随机浮点数;random.randint(a, b) 能够随机生成指定范围 [a, b] 内的整数;random.randrange(start, stop[, step]) 则可以生成指定范围内按步长生成随机数(不包含结束值 stop)等。示例如下:

os 模块:提供了与操作系统进行交互的功能,像操作文件和目录(如 os.mkdir(path) 用于创建目录,os.rmdir(path) 用来删除目录等)、获取环境变量(os.environ 可以获取系统的环境变量信息)以及管理进程等诸多操作。

第三方模块:

这些模块是由 Python 社区的开发者或者其他组织、个人开发并分享出来的,功能往往非常丰富且具有很强的针对性,可以帮助开发者更高效地完成各种特定任务。不过,要使用这些第三方模块,通常需要通过 pip 工具进行安装(pip install module_name 的方式,其中 module_name 为具体的模块名称)。

常见的第三方模块有很多,比如:

BeautifulSoup:它是一个用于解析 HTML 和 XML 文档的库,在进行网页数据爬取和解析时非常有用。可以方便地从网页的 HTML 代码中提取出我们想要的元素,如文本内容、链接等。

requests:是 Python 中广泛使用的 HTTP 库,能让我们简单且高效地发送各种 HTTP 请求(GET、POST 等),获取网页数据或者与网络接口进行交互,相比 Python 自带的一些网络相关模块,使用起来更加便捷和人性化。

numpy:主要用于对多维数组进行高效的数学运算以及提供一些高级的数学方法,在数据科学、机器学习等领域应用十分广泛,比如可以快速地生成随机数组、进行矩阵运算等操作。

应用程序自定义模块:

这是开发者根据自己项目的实际需求,自行编写创建的模块。

二、Python 模块的创建

(一)创建步骤

创建 Python 模块可以按照以下具体步骤来进行:

创建.py 文件:

首先,使用pycharm创建一个以 .py 结尾的文件。比如,若要创建一个用于数学计算相关功能的模块,可将文件命名为 math_functions.py 。文件名需要遵循 Python 的命名规范,通常使用小写字母,单词之间用下划线分隔,这样有助于提高代码的可读性以及避免一些潜在的命名冲突问题。

继续上面 math_functions.py 的例子,可以在其中定义一个计算两个数之和的函数,代码如下:

def add_numbers(a, b):

    """

    该函数用于计算两个数的和,参数a和b分别为要相加的两个数

    """

    return a + b

这里定义的函数 add_numbers 有两个参数 a 和 b,并在函数体内部实现了将这两个数相加后返回结果的功能。同时添加了文档字符串(docstring),用于描述函数的作用、参数情况等信息,方便后续其他开发者阅读和理解代码的功能。

除了函数,也可以定义类,比如定义一个简单的表示二维坐标点的类:

class Point:

    """

    此类用于表示二维平面上的一个坐标点,包含x和y两个属性

    """

    def __init__(self, x, y):

        self.x = x

        self.y = y

    def get_distance(self, other_point):

        """

        该方法用于计算当前坐标点与另一个坐标点之间的距离

        参数other_point为另一个坐标点对象

        """

        import math

        dx = self.x - other_point.x

        dy = self.y - other_point.y

        return math.sqrt(dx ** 2 + dy ** 2)

上述代码中,Point 类有初始化方法 __init__ 用于设置坐标点的 x 和 y 属性值,还有 get_distance 方法用于计算与另一个坐标点之间的距离。

另外,还可以定义变量,例如:

PI = 3.1415926

添加文档字符串和注释:

为了增强代码的可读性和可维护性,需要为函数、类以及模块本身添加适当的文档字符串(docstring),按照规范的格式对其功能、参数、返回值等关键信息进行说明,就像上面例子中展示的那样。同时,对于一些关键代码逻辑或者复杂的语句,添加必要的注释来进一步解释其意图,注释以 # 开头,例如:

# 下面这个循环用于遍历列表中的元素并打印

for element in my_list:

    print(element)

例如,假设我们创建好了 math_functions.py 这个模块文件,保存到了项目的 utils 文件夹下(假设 utils 文件夹在 Python 解释器能搜索到的路径范围内),后续在其他 Python 脚本中就可以使用 import 语句来导入这个自定义模块并使用其中定义的功能了,像这样:

import utils.math_functions

result = utils.math_functions.add_numbers(3, 5)

print(result)

或者使用 from...import 语句来导入特定的函数、类等:

from utils.math_functions import add_numbers, Point

result = add_numbers(2, 4)

point1 = Point(1, 1)

point2 = Point(4, 5)

distance = point1.get_distance(point2)

print(distance)

通过以上步骤,就完成了一个 Python 模块的创建过程,并且可以在其他代码中方便地导入和使用模块内定义的各种功能了。

三、Python 模块的导入方法

(一)import 语句导入

在 Python 中,使用 import 关键字可以导入整个模块。当执行 import 语句时,Python 会在相应的搜索路径中查找指定的模块文件,并将其加载进来,同时创建一个以模块名命名的命名空间。我们需要通过这个模块名作为前缀,来访问模块内定义的函数、变量和类等成员。

例如,要导入 Python 标准库中的 math 模块,可以这样写:

import math

result = math.sqrt(16)  # 使用math模块中的sqrt函数计算平方根

print(result)

在上述代码中,通过 import math 导入了 math 模块,然后使用 math.sqrt() 的方式来调用模块里的 sqrt 函数进行平方根计算。

(二)from...import 语句导入

from...import 语句提供了一种更灵活的导入方式,它允许我们从模块中导入指定的成员(如函数、变量、类等),并直接在当前命名空间中使用这些成员,无需再添加模块名作为前缀。

例如,若只需要 math 模块中的 sqrt 函数和 pi 常量,可以这样导入:

from math import sqrt, pi

result = sqrt(16)  # 直接使用sqrt函数

print(result)

print(pi)

对比 import 语句导入整个模块的方式,这里直接使用 sqrt 和 pi 就可以访问对应的功能和常量,代码看起来更加简洁。

不过,这种导入方式也有需要注意的地方,那就是可能会出现命名冲突问题。假设同时从两个不同模块导入了同名的函数,像这样:

from module1 import func

from module2 import func

func()  # 这里就无法明确到底调用的是哪个模块里的func函数了

在实际应用中,当确定不会出现命名冲突,且只需要使用模块中的部分成员时,from...import 语句能让代码更加简洁明了,提高代码的可读性和书写效率。但如果对代码的清晰性和可维护性要求较高,尤其是在大型项目中,使用 import 语句导入整个模块可能更为稳妥,能够明确区分功能所属的模块来源。

(三)其他导入方式

1. 使用别名导入(import...as... 和 from...import...as...)

在 Python 中,我们可以使用 as 关键字给导入的模块或者成员指定别名。对于模块来说,当模块名较长或者在代码中多次导入不同模块,为了使代码书写更简洁,使用别名是个不错的选择。

例如,导入 numpy 模块并给它指定别名 np:

import numpy as np

arr = np.array([1, 2, 3])  # 使用别名np来调用array函数创建数组

print(arr)

这里通过 import numpy as np,后续代码中就可以用简短的 np 来代替 numpy,让代码看起来更加清爽简洁,尤其在涉及较多 numpy 相关操作的代码中,这种简洁性的优势会更加明显。

2. 导入模块所有内容(from...import *)

使用 from...import * 语句可以一次性导入模块中的所有对象,使得这些对象可以直接在当前命名空间中使用,无需添加模块名前缀。例如:

from math import *

result = sqrt(16)  # 直接使用sqrt函数

print(result)

print(pi)

然而,这种导入方式并不推荐在实际开发中大量使用,尤其是在大型项目里。主要原因在于它可能造成命名冲突

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

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

相关文章

当我用影刀AI Power做了一个旅游攻略小助手

在线体验地址:旅游攻略小助手https://power.yingdao.com/assistant/ca1dfe1c-9451-450e-a5f1-d270e938a3ad/share 运行效果图展示: 话不多说一起看下效果图: 智能体的截图: 工作流截图: 搭建逻辑: 其实这…

AI Agent与MEME:技术与文化融合驱动Web3创新

AI Agent如何引领Web3新时代? 随着Web3与区块链技术的迅速发展,AI Agent作为人工智能与区块链的交汇点,正在逐步成为推动去中心化生态的重要力量。同时,MEME文化凭借其强大的社区驱动力和文化渗透力,在链上生态中扮演着…

【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器

作为主设备写入多个线圈和寄存器 文章目录 作为主设备写入多个线圈和寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、写入多个线圈2.1 数据格式2.2 发送数据2.3 结果3、写入多个寄存器3.1 数据格式3.2 发送数据3.3 结果本文将实现STM32作为ModBus主…

Spring学习之——Sping-XML

一、Spring的概述 (一)什么是Spring? Spring是针对bean对象的生命周期进行管理的轻量级容器。提供了功能强大IOC、AOP及Web MVC等功能。Spring框架主要由七部分组成:分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 S…

电商商品详情API接口(item get)数据分析上货

电商商品详情API接口(item get)在数据分析与商品上货方面发挥着重要作用。以下是对这两个方面的详细探讨: 一、数据分析 数据源获取: 商品详情API接口提供了丰富的数据源,包括商品的标题、价格、库存、描述、图片、用…

EasyGBS国标GB28181平台P2P远程访问故障排查指南:客户端角度的排查思路

在现代视频监控系统中,P2P(点对点)技术因其便捷性和高效性而被广泛应用。然而,当用户在使用P2P远程访问时遇到设备不在线或无法访问的问题时,有效的排查方法显得尤为重要。本文将从客户端的角度出发,详细探…

win11 C盘出现感叹号解决方法

出现感叹号,原因是对C盘进行了BitLocker驱动器加密操作。如果想去除感叹号,对C盘进行BitLocker解密即可。 步骤如下: 1.点击Windows搜索框 2.搜索框内输入 系统 3.按下回车,进入系统界面 4.点击隐私和安全性 点击BitLocker驱…

学习threejs,scene.overrideMaterial全局材质效果

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.2 ☘️THREE.Scene 场景1.2 ☘️…

GTID详解

概念和组成 1,全局事务表示:global transaction identifiers 2, GTID和事务一一对应,并且全局唯一 3,一个GTID在一个服务器上只执行一次 4,mysql 5.6.5开始支持 组成 GTID server_uuid:transaction_id 如&#xf…

prober.php探针

raw.githubusercontent.com/kmvan/x-prober/master/dist/prober.php

差分矩阵(Difference Matrix)与累计和矩阵(Running Sum Matrix)的概念与应用:中英双语

本文是学习这本书的笔记: https://web.stanford.edu/~boyd/vmls/ 差分矩阵(Difference Matrix)与累计和矩阵(Running Sum Matrix)的概念与应用 在线性代数和信号处理等领域中,矩阵运算常被用来表示和计算各种数据变换…

EasyPlayer.js播放器Web播放H.265要兼顾哪些方面?

在数字化时代,流媒体技术已经成为信息传播和娱乐消费的重要方式。随着互联网技术的飞速发展和移动设备的普及,流媒体服务正在重塑我们的生活和工作方式。从视频点播、在线直播到音乐流媒体,流媒体技术的广泛应用不仅改变了内容的分发和消费模…

AI开发:支持向量机(SVM)鸢尾花模型入门教程- Python 机器学习

最近接触了一些数据分析的任务,越来越多地听到支持向量机(SVM), 之前我们也一起学习过 AI开发:支持向量机(SVM)入门教程- Python 机器学习 今天我们再由浅入深的地来重温和学习这个AI算法,以便我们进一步掌握如何熟悉…

Pytorch实战|猴痘病识别

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 一、 前期准备 1. 设置GPU 如果设备上支持GPU就使用GPU,否则使用CPU import torch import torch.nn as nn import torchvision.transforms as transforms im…

使用pyinstaller打包pyqt的程序,运行后提示ModuleNotFoundError: No module named ‘Ui_main‘

环境:windowpython3.9pyqt6 使用pyqt UI编辑器生成了main.ui ,main.ui编译成了Ui_main.py main.py 使用当前目录下的Ui_main.py。 打包过程没报错,运行报错。 错误如下: 解决方法:pyinstaller -Fw main.py --paths. 使…

Vue2 router相关记录

vue-router 安装与配置 vue2 得用vue-router3 npm i vue-router3vue3 得用vue-router4 建立一个文件夹router index.js import About from "/components/About.vue"; import Home from "/components/Home.vue";const router new VueRouter({routes: …

基于linux下实现的ping程序(C语言)

linux下实现的ping程序 一、设计目的 PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。 课程设…

2024年12月16日Github流行趋势

项目名称:PDFMathTranslate 项目维护者:Byaidu reycn hellofinch Wybxc YadominJinta项目介绍:基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI/Docker。项目star数…

国标GB28181协议平台Liveweb:搭建建筑工地无线视频联网监控系统方案

随着科技高速发展,视频信号经过数字压缩,通过互联网宽带或者移动4G网络传递,可实现远程视频监控功能。将这一功能运用于施工现场安全管理,势必会大大提高管理效率,提升监管层次。而这些,通过Liveweb监控系统…

Ansible playbook 详解与实战操作

一、概述 playbook 与 ad-hoc 相比,是一种完全不同的运用 ansible 的方式,类似与 saltstack 的 state 状态文件。ad-hoc 无法持久使用,playbook 可以持久使用。 playbook 是由一个或多个 play 组成的列表,play 的主要功能在于将事先归并为一…