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 运行效果图展示: 话不多说一起看下效果图: 智能体的截图: 工作流截图: 搭建逻辑: 其实这…

Apache Tomcat 漏洞CVE-2024-50379条件竞争文件上传漏洞 servlet readonly spring boot 修复方式

1,关于漏洞 Apache Tomcat是一个流行的开源 Web 服务器和 Java Servlet 容器。 二、 漏洞描述 Apache Tomcat中修复了个 TOCTOU 竞争条件远程代码执行漏洞 (CVE-2024-50379),该漏洞的 CVSS 评分为 9.8。Apache Tomcat 中 JSP 编译期间存在检查时间使用时…

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

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

EasyExcel 导出文件

EasyExcel 导出文件 EasyExcel导出文件,并解决格式报错 项目中使用EasyExcel导出数据 EasyExcel导出数据 引入pom文件 <!-- easy-excel --> <dependency><groupId>com.alibaba</groupId></

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——11上位机与小车交互

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——11上位机与小车交互 ​ 根据上一节的配置&#xff0c;目前已经建立了通讯环境&#xff0c;接下来给大家带来上位机与小车交互 这一章节里面也有图片大家去地瓜开发者社区看对应文章吧链接

【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主…

使用二分查找法找出给定点距离给定点集合距离最近的点

1、场景描述 给定点Point A &#xff08;x,y&#xff09;和 直线点集合 Points [(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)......],计算出集合中距离点A最近的一个点 &#xff08;如果集合中的两个点距离A点最近且相等&#xff0c;则只取其中一个&#xff09; 2、代码&#x…

经济学 ppt 2 部分

前言 上一次复习经济学是好久之前了&#xff0c;看了第一章的 ppt &#xff0c;好像重点就是谁是软件经济学之父。昨天老师讲了一下题型&#xff0c;20 分选择题&#xff0c; 20 分判断题&#xff0c;20 分计算题&#xff0c;6 6 8 三个计算题&#xff0c;25 分表格&#xff0…

winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭

winform中屏蔽双击最大化或最小化窗体(C#实现)&#xff0c;禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭 protected override void WndProc(ref Message m){#region 处理点击窗体标题栏放大缩小问题&#xff0c;禁用点击窗体标题栏放大缩小//logger.Info($&…

【SolidWorks转URDF】ROS学习笔记

一、环境配置 软件版本&#xff1a;SolidWorks 2022 SP3.1 Premium 转换插件版本&#xff1a;sw2urdfSetup2021.exe 对硬件有一定要求&#xff0c;需要独立显卡&#xff0c;显存大一点&#xff0c;否则会很卡。 二、文件转换 SolidWorks中的零部件和装配体对应URDF文件中的…

Spring学习之——Sping-XML

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

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

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

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

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

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

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

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

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.2 ☘️THREE.Scene 场景1.2 ☘️…

GTID详解

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

面试题整理4----lvs,nginx,haproxy区别和使用场景

LVS、Nginx、HAProxy&#xff1a;区别与使用场景 1. LVS&#xff08;Linux Virtual Server&#xff09;1.1 介绍1.2 特点1.3 使用场景 2. Nginx2.1 介绍2.2 特点2.3 使用场景 3. HAProxy3.1 介绍3.2 特点3.3 使用场景 4. 总结对比 在构建高可用、高性能的网络服务时&#xff0c…

prober.php探针

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

拦截器魔法:Spring MVC中的防重放守护者

目录 简介HandlerInterceptorAdapter vs HandlerInterceptor创建一个防重放拦截器注册拦截器路径模式匹配适配器模式的魅力总结 简介 在构建安全可靠的Web应用程序时&#xff0c;防止请求重放攻击是一项关键任务。当用户或系统发出的请求被恶意第三方捕获并重复发送给服务器…

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

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