06. Python模块

news2024/11/23 1:21:40

目录

1、前言

2、什么是模块

3、Python标准库模块

3.1、os模块

3.2、datetime 模块

3.3、random模块

4、自定义模块

4.1、创建和使用

4.2、模块命名空间

4.3、作用域

5、安装第三方依赖

5.1、使用 pip 安装单个依赖

5.2、从 requirements.txt 安装依赖

5.3、安装指定版本的依赖

5.4、从版本库安装依赖

6、from...import...as

7、小结


1、前言

Python 的强大之处之一就是其模块化编程的支持。模块是代码的组织单元,它允许你将代码划分为可重用的部分,从而提高代码的可维护性和可扩展性。今天我们一起来探讨 Python 模块的概念、创建和使用方法,以及一些常见的 Python 标准库模块。

2、什么是模块

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。

模块是包含 Python 代码的文件,它可以包括变量、函数和类。通过将代码组织成模块,我们可以更好地组织代码、提高可重用性,并支持更好的命名空间管理。使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

此外,Python为了避免模块名冲突,引入了按目录来组织模块的方法,称为包(Package)。如:

其中,first_demo.py,main.py就是一个名字分别叫做first_demo和main的模块。而first_demo存在模块冲突了,于是我们通过first包(Package)来组织,避免冲突。

3、Python标准库模块

Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。如os模块、datetime模块、random模块等。使用内置模块我们只需要使用import导入该模块,然后就有了以模块名称为变量名的变量引用该模块,使用该变量就可以访问模块里的所有功能。

3.1、os模块

os 模块提供了与操作系统交互的功能,包括文件和目录操作、环境变量等。

import os

if __name__ == '__main__':
    """ 返回当前的工作目录 """ 
    """ Return a unicode string representing the current working directory. """
    print(os.getcwd())  

3.2、datetime 模块

datetime 模块用于处理日期和时间,提供了丰富的功能,如日期的格式化、时间的计算等。

from datetime import datetime 

if __name__ == '__main__':
    now_time = datetime.now()
    print("当前时间:", now_time)

3.3、random模块

random 模块用于生成伪随机数,提供了多种随机数生成函数。

import random

if __name__ == '__main__':
    for i in range(10):  # 打印10次
        print(random.randint(1, 100))

4、自定义模块

除了使用Python标准库中的模块以外,我们还可以按需定义自己的模块。这种方式在团队协作开发模式中非常有用。

4.1、创建和使用

创建模块非常简单,只需将相关代码保存在一个文件中,并使用 import 关键字在其他地方引入它。

定义一个my_module.py模块,里面定义了一个接收名称的函数,同时返回hello, xxx。

# 定义了一个sqy_hello函数,用于外部调用
def say_hello(name):
    return f"Hello, {name}!"

使用该模块:

# 使用import关键字引入该模块
import my_module

if __name__ == '__main__':
    # 调用该模块
    print(my_module.say_hello("张三"))

4.2、模块命名空间

模块创建了一个独立的命名空间,可以使用模块名来访问其中的变量和函数,从而避免命名冲突。如在my_module.py模块中定义一个变量,我们在引用该模块的函数中可以调用该变量,而不与自己模块冲突。如:

COUNTRY = "中国"


# 定义了一个sqy_hello函数,用于外部调用
def say_hello(name):
    return f"Hello, {name}!"

调用:

import my_module

COUNTRY = "中国111"

if __name__ == '__main__':
    print(my_module.say_hello("张三"), my_module.COUNTRY, "你好")

4.3、作用域

模块的作用域是指在模块中定义的变量、函数和类的可见性和访问范围。

在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。而在Python中,是通过_前缀来实现的。正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等。

类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名。

类似_xxx和__xxx这样的函数或变量就是非公开的(private),表示这个函数是“内部实现细节”或“私有”的,不应该被直接引用或调用。这是一种命名约定,告诉其他程序员,这个函数是模块内部使用的,不属于模块的公共接口。

def _internal_function():
    print("This is an internal function.")

def public_function():
    print("This is a public function.")

其中_internal_function 被认为是模块内部使用的,而 public_function 是模块的公共接口。

5、安装第三方依赖

除了Python自带的模块,自己定义的模块以外,通常还会使用别人定义好的第三方依赖。使用这些依赖,由于不在我们的Python库中,因此需要先进行安装。

5.1、使用 pip 安装单个依赖

在Python中,安装第三方模块,是通过包管理工具pip完成的。

pip install package_name

例如安装requests依赖:

pip install requests

5.2、从 requirements.txt 安装依赖

通常,在项目中会有一个名为 requirements.txt 的文件,其中列出了项目所需的所有依赖。你可以使用以下命令一次性安装所有依赖:

pip install -r requirements.txt

5.3、安装指定版本的依赖

如果你需要安装特定版本的依赖,可以使用 == 符号:

pip install package_name==1.2.3
# 指定安装最新版本
pip install --upgrade package_name

5.4、从版本库安装依赖

有时你可能需要从版本库(例如 GitHub)直接安装依赖。可以使用以下命令:

pip install git+https://github.com/username/repo.git

6、from...import...as

使用import引入模块时,引用模块的变量名默认为模块名。有时候如果模块名太长,我们可以通过as关键字,进行变量名重定义。如:

import my_module as mm  # 定义变量名为mm

if __name__ == '__main__':
    # 这里通过重定义的变量名mm访问模块功能
    print(mm.say_hello("张三"))

from ... import ... 是一种导入模块中特定成员(变量、函数、类等)的语法。这种方式允许你直接从模块中导入你需要的部分,而不是整个模块。如:

""" 
这里只导入了math模块中的sqrt函数
如果要导入多个函数,使用英文逗号,隔开即可 
如果需要引入全部模块,import后面跟上*号即可,这种方式不是推荐的做法,因为它可能导致命名冲突和代码不易读。
"""
from math import sqrt

result = sqrt(25)
print(result)

7、小结

Python 模块是模块化编程的基础,能够帮助我们更好地组织和管理代码。通过合理使用模块,我们可以提高代码的可读性、可维护性,并能够更容易地共享和重用代码。掌握模块的基本概念和高级用法,是成为 Python 高效开发者的重要一步。

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

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

相关文章

Python:(Sentinel-1)如何解析SNAP输出的HDF5文件并输出为GeoTIFF?

博客已同步微信公众号:GIS茄子;若博客出现纰漏或有更多问题交流欢迎关注GIS茄子,或者邮箱联系(推荐-见主页). Python:(Sentinel-1)如何解析SNAP输出的HDF5文件并输出为GeoTIFF? 01 前言 最近…

【NI-RIO入门】使用LabVIEW进行数据采集测量

于ni kb摘录 选择合适的编程模式 CompactRIO系统具有至少两个用户可选模式。某些CompactRIO型号具有附加的用户可选模式,可以在实时NI-DAQmx中进行编程。请参考本文以判断您的CompactRIO是否能够使用实时NI-DAQmx。将目标添加到项目后,将提示您选择要使…

TestSSLServer4.exe工具使用方法简单介绍(查SSL的加密版本SSL3或是TLS1.2)

一、工具使用方法介绍 工具使用方法参照:http://www.bolet.org/TestSSLServer/ 全篇英文看不懂,翻译了下,能用到的简单介绍如下: 将下载的TestSSLServer4.exe工具放到桌面上,CMD命令行进入到桌面目录,执…

Gitee基础知识

目录 1-gitee 1.1gitee介绍 1.2git与gitee的关系 1.3在国内为什么选择Gitee 2-注册与创建远程仓库 2.1注册 2.2创建远程仓库 2.3配置ssh公钥 2.3.1公钥的生成方法: 2.3.2 在gitee中配置公钥 2.3.4验证公钥 3-添加与推送远程仓库master 3.1基本命令…

78-C语言-完数的判断,以及输出其因子

简介:一个数如果恰好等于它的因子之和,这个数就称为完数,C语言编程找出1000之内的所有完数,并输出其因子。因子可以整除该数字的数, 如6的因子:1 2 3,6%10 6%20 6%30 解释全在注…

20 5G中高速列车通信:设计相关元素以减轻高移动性带来的影响

文章目录 一 、物理层设计1 DMRS2 CSI 和SRS3 PTRS4 多天线配置 二 初始接入三 目前面临困难 解决问题:列车高速移动,会使信道相干时间较短、多普勒频移和多普勒扩展较大等问题。为了在列车高速移动中解决这些问题,这篇文章概括了5G关键技术&…

掌动智能浅谈云网络流量分析的主要过程

在云计算时代,网络流量分析成为确保网络安全和性能的重要环节。随着企业和组织将应用和服务迁移到云平台,对云网络流量进行深入的分析变得至关重要。本文将介绍云网络流量分析的主要过程,以帮助读者更好地理解如何有效地监控和管理云环境中的…

MySQL进阶|MySQL中的事务(一)

文章目录 数据库事务MySQL中的存储引擎InnoDB存储引擎架构什么是事务事务的状态总结 数据库事务 MySQL 事务主要用于处理操作量大,复杂度高的数据。比方我想要删除一个用户(销户)以及这个用户的个人信息、订单信息以及其他信息,这…

对JVM内存模型的理解

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

MySQL主从复制详解

目录 1. 主从复制的工作原理 1.1. 主从复制的角色 1.2. 主从复制的流程 2. 配置MySQL主从复制 2.1. 确保主服务器开启二进制日志 2.2. 设置从服务器 2.3. 连接主从服务器 2.4. 启动复制 3. 主从复制的优化与注意事项 3.1. 优化复制性能 3.2. 注意复制延迟 3.3. 处理…

干涉光学测试导论

1.用于光学测试的基本干涉仪 2。相移干涉术 3。专业光学测试 4。长波长干涉术 5。非球面试验 6。表面微观结构的测量 7。绝对测量 8。结束语 第1部分-光学测试用基本干涉仪 (1)双光束干涉 (2)菲佐干涉仪和特维曼-格林干涉仪 (3)测试平面和球面的基本技术 (4)球面的基本…

2020年度NPcon-容器与微服务实践峰会 回顾

一,会议基本信息 时间:12月16日14:00-17:00 地点:上海机遇星球(上海市黄浦区南京西路389号明天广场裙楼2楼) 电梯旁边的指示牌 会场现场 出来的时候,天快黑了 二,内容回顾 由四个讲座和一个…

(5)shell命令以及Linux的权限

写在前面 本章我们将重点讲解 Linux 权限,这是 Linux 基础部分中非常重要的一部分。内容比较干,我会稍稍正经些去讲解。话不多说,我们直接切入正题。 shell 命令及运行原理 严格意义上说的是一个操作系统,我们称之为 —— &…

【AI基础设施】智算场景的资源管理系统与未来展望

高性能计算与智算场景 首先澄清两个概念,高性能计算与智算场景,高性能计算主要是面向天气预测、生物计算、材料计算等场景,而最近几年很火的智算主要是面向AI场景的计算,如语音识别、图像识别、自动驾驶等场景,我们可…

Git 如何撤回已 Push 的代码

在日常的开发过程中,我们广泛利用Git进行版本控制。然而,有时我们可能会误将错误的代码推送到远程仓库,或者希望在本地返回到先前的某个版本以重新进行开发。 就像我个人的经历一样,我曾推送了一些我认为未来会非常有用的优化方案…

14:00面试,14:05就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到12月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40…

SQL进阶理论篇(十一):什么是MVCC?

文章目录 简介什么是MVCC快照读与当前读悲观锁的问题示例参考文献 简介 在MySQL中,默认的隔离级别是可重复读,可以解决脏读和不可重复读的问题,但不能解决幻读问题。如果想要解决幻读问题,就需要采用串行化的方式,通过…

数据结构——【万字文章+配图+代码】带你深入理解二叉树

1. 二叉树的概念 二叉树是一种有限集合,由根和左右子树构成,每个结点最多有两棵子树,且这两棵子树具有顺序关系 2. 二叉树的特殊情况: 2.1 满二叉树: 一个二叉树,如果每次的结点都达到最大值&#xff…

07-Eventing及实践

1 Knative Eventing的相关组件 Knative Eventing具有四个最基本的组件:Sources、Brokers、Triggers 和 Sinks 事件会从Source发送至SinkSink是能够接收传入的事件可寻址(Addressable)或可调用(Callable)资源 Knative S…

二维码智慧门牌管理系统升级解决方案:房屋管理

文章目录 前言一、一站式服务二、全方位管理三、未来展望四、智慧解决方案 前言 科技带来智慧生活 随着科技的不断发展,智能化已经成为我们生活的重要组成部分。二维码智慧门牌管理系统是这一趋势中的关键工具之一。除了提供标准地址服务外,该系统还为房…