Python模块与包

目录

一、模块(Module)

1. 模块的概念

2. 模块的作用

3. 创建模块

4. 导入模块

5. 模块的 __name__ 属性

6. 模块的 __all__ 变量

二、包(Package)

1. 包的概念

2. 包的作用

3. 创建包

3. 使用包

4. __init__.py 的作用

5. 相对导入

6. 第三方包

三、模块与包的搜索路径

四、模块与包的使用规范


一、模块(Module)

1. 模块的概念

模块是一个包含Python代码的文件,文件扩展名为 .py。模块可以包含类、函数、变量和可执行代码。通过模块,我们可以将代码逻辑划分为独立的单元。

2. 模块的作用

一个模块就是一个工具包,不同的模块能实现不同的功能。

3. 创建模块

只需创建一个 .py 文件,也叫自定义模块,包含可重用的代码(如类、函数、变量等)。例如,创建一个名为 mymodule.py 的文件:

 # mymodule.pydef greet(name):return f"Hello, {name}!"​def add(a, b):return a + b

4. 导入模块

(1)使用 import 关键字导入整个模块,然后访问其中的函数或变量。

 import mymodule​print(mymodule.greet("Tom"))  # 输出: Hello, Tom!print(mymodule.add(3, 5))  # 输出: 8

(2)导入模块中的特定函数或变量。

 from mymodule import add​print(add(3, 5))  # 输出: 8

(3)导入模块并为其设置别名。

 import mymodule as m​print(m.add(3, 5))  # 输出: 8

(4)导入模块中的特定函数或变量,并为其设置别名。

 from mymodule import add as a​print(a(3, 5))  # 输出: 8

(5)导入模块中的所有内容。这种方法和 import mymodule 的区别是调用模块里的变量或函数等前面不用加 mymodule. 。但是不推荐使用这种方法,容易造成命名冲突。

 from mymodule import *​print(add(3, 5))  # 输出: 8

5. 模块的 __name__ 属性

每个模块都有一个内置的 __name__ 属性。当模块被直接运行时,__name__ 的值为 "__main__";当模块被导入时,__name__ 的值为模块名。

 # mymodule.pyif __name__ == "__main__":print("This module is being run directly!")else:print("This module is being imported!")

6. 模块的 __all__ 变量

如果一个模块文件中有 all 变量,当在别的文件中使用 from mymodule import * 导入该模块时,只能导入 all 变量中的元素。

  • 定义 __all__

在模块中,将 __all__ 定义为一个列表,列出所有希望公开的名称。

 # mymodule.py​__all__ = ['greet']  # 只公开greet​def greet(name):return f"Hello, {name}!"​def private_function():return "This is private!"
  • 使用 from module import *

当使用 from module import * 时,只有 __all__ 中列出的内容会被导入。

 from mymodule import *​print(greet("Tom"))  # 输出: Hello, Tom!​# 以下代码会报错,因为 _private_function 不在 __all__ 中print(private_function())

如果要使用 private_function() ,可以再使用 from mymodule import private_function 导入。

二、包(Package)

1. 包的概念

包是一个包含多个模块的目录(文件夹)。包通常还包含一个特殊的文件 __init__.py,用于标识该目录是一个包。

2. 包的作用

包可以将相关的模块组织在一起,形成一个逻辑上的分组,可以帮助我们管理这些模块。通过将模块放在不同的包中,还可以避免模块之间的命名冲突。

3. 创建包

创建一个目录,并在其中放置模块文件和 __init__.py 文件。例如:

 mypackage/__init__.pymodule1.pymodule2.py
  • __init__.py 可以是空文件,也可以包含包的初始化代码。

  • 包可以嵌套,形成多层级的包结构。

3. 使用包

使用点号(.)访问包中的模块。例如:

 from mypackage import module1import mypackage.module1from mypackage.module2 import some_function

4. __init__.py 的作用

  • 标识目录为包。

  • 在导入包时,__init__.py 中的代码会被执行。

  • 通过在 __init__.py 中定义 __all__ 变量,可以控制 from package import * 语句的导入行为,指定哪些模块或子模块可以被导入。例如:假设有一个名为 my_package 的包,其中 module1.pymodule2.py 是两个模块。我们希望在使用 from my_package import * 时,只导入 module1,而不导入 module2。我们可以在 __init__.py 中定义 __all__ 变量如下:

 # my_package/__init__.py__all__ = ["module1"]

这样,当执行 from my_package import * 时,只有 module1 会被导入到当前命名空间中,而 module2 不会被导入。

5. 相对导入

在包内部,可以使用相对导入来引用其他模块。例如:

 # mypackage/module2.pyfrom .module1 import greet
  • . 表示当前目录。

  • .. 表示上级目录。

6. 第三方包

Python第三方包是Python生态系统中除标准库之外的模块或包,由社区开发者或团队维护和开发。这些包极大地扩展了Python的功能,涵盖了数据分析、科学计算、Web开发、网络编程等多个领域。pip 是Python官方推荐的包管理工具,可以通过命令pip install 包名安装第三方包。

三、模块与包的搜索路径

当导入模块或包时,Python会按照以下顺序搜索:

  1. 当前目录。

  2. 环境变量 PYTHONPATH 指定的目录。

  3. Python标准库目录。

  4. site-packages 目录(第三方库的安装位置)。

可以通过 sys.path 查看搜索路径:

 import sysprint(sys.path)

如果需要添加自定义路径,可以修改 sys.path

 import syssys.path.append("/path/to/your/module")

四、模块与包的使用规范

  1. 命名规范

    • 模块名使用小写字母和下划线(如 my_module.py)。

    • 包名使用小写字母(如 mypackage)。

  2. 避免循环导入: 模块之间相互导入可能导致循环导入错误,应尽量避免。

  3. 使用 __init__.py 定义包的公共接口: 将常用的函数或类在 __init__.py 中导入,方便用户使用。

  4. 使用 if __name__ == "__main__":: 确保模块的测试代码不会在导入时执行。

  5. 合理组织包结构: 根据功能将模块分组到不同的包中,避免将所有代码放在一个模块中。

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

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

相关文章

MQTT的安装和使用

MQTT的安装和使用 在物联网开发中,mqtt几乎已经成为了广大程序猿必须掌握的技术,这里小编和大家一起学习并记录一下~~ 一、安装 方式1、docker安装 官网地址 https://www.emqx.com/zh/downloads-and-install/broker获取 Docker 镜像 docker pull e…

ROS多机通信功能包——Multibotnet

引言 这是之前看到一位大佬做的集群通信中间件,突发奇想,自己也来做一个,实现更多的功能、更清楚的架构和性能更加高效的ROS多机通信的功能包 链接:https://blog.csdn.net/benchuspx/article/details/128576723 Multibotnet Mu…

pfsense部署四(静态路由的配置)

目录 一 . 介绍 二 . 配置过程 一 . 介绍 pfsense开源防火墙经常在进行组网时,通常会用于连接不同的网络,在这个时候进需要给pfsense配置路由,而这篇文章介绍的是静态路由的配置 二 . 配置过程 拓扑图: 本次实验使用ensp模拟器…

干货!三步搞定 DeepSeek 接入 Siri

Siri高频用户福音,接下来仅需3步教你如何将 DeepSeek 接入 Siri!虽然苹果公司并没有给国行产品提供 ai 功能,但是我们可以让自己的 iPhone 更智能一点。虽然有消息称苹果和阿里巴巴将合作为中国iPhone用户开发AI功能,但我们可以先…

自动学习和优化过程,实现更加精准的预测和决策的智慧交通开源了

智慧交通视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。通过高效的实时视…

DeepSeek R1 本地部署指南 (3) - 更换本地部署模型 Windows/macOS 通用

0.准备 完成 Windows 或 macOS 安装: DeepSeek R1 本地部署指南 (1) - Windows 本地部署-CSDN博客 DeepSeek R1 本地部署指南 (2) - macOS 本地部署-CSDN博客 以下内容 Windows 和 macOS 命令执行相同: Windows 管理员启动:命令提示符 CMD ma…

使用 Node.js 读取 Excel 文件并处理合并单元格

使用 Node.js 读取 Excel 文件并处理合并单元格 在现代的数据处理任务中,Excel 文件是一种非常常见的数据存储格式。无论是数据分析、报表生成,还是数据迁移,Excel 文件都扮演着重要的角色。然而,处理 Excel 文件时,尤…

汇川EASY系列之以太网通讯(MODBUS_TCP做从站)

汇川easy系列PLC做MODBUS_TCP从站,不需要任何操作,但是有一些需要知道的东西。具体如下: 1、汇川easy系列PLC做MODBUS_TCP从站,,ModbusTCP服务器默认开启,无需设置通信协议(即不需要配置),端口号为“502”。ModbusTCP从站最多支持31个ModbusTCP客户端(ModbusTCP主站…

1996-2023年各省公路里程数据(无缺失)

1996-2023年各省公路里程数据(无缺失) 1、时间:1996-2023年 2、来源:国家统计局、统计年鉴 3、指标:公路里程(万公里) 4、范围:31省 5、指标解释:公路里程指报告期末…

虚拟机访问主机的plc仿真

主机 虚拟机 默认,连接物理地址

从“不敢买大”到“按墙选屏”,海信电视如何凭百吋重构客厅?

电视买小了,成为茜茜新房入住后最大的遗憾。 新房装修的时候,茜茜担心电视买大了眼睛看着累,因此把尺寸选在了65吋。结果入住后,孩子看动画片嚷着“画面太小”,老公看球赛吐槽“看不清球员号码”,全家追剧…

Swift 经典链表面试题:如何在不访问头节点的情况下删除指定节点?

摘要 在日常开发中,链表虽然不像数组、字典那么常用,但在某些场景下还是挺重要的。尤其是面试的时候,链表题目可是经典考点之一。今天我们要聊的就是一个看似简单,但很多人第一次做都会卡住的问题——删除单链表中的指定节点。 …

楼宇自控系统的结构密码:总线与分布式结构方式的差异与应用

在现代建筑中,为了实现高效、智能的管理,楼宇自控系统变得越来越重要。它就像建筑的 智能管家,可自动控制照明、空调、通风等各种机电设备,让建筑运行更顺畅,还能节省能源成本。而在楼宇自控系统里,有两种关…

git | 回退版本 并保存当前修改到stash,在进行整合。[git checkout | git stash 等方法 ]

目录 一些常见命令: git 回退版本 一、临时回退(不会修改历史,可随时回到当前版本) 方法1:git checkout HEAD~1 问题:处于 detached HEAD 状态下提交的,无法直接 git push ✅ 选项 1&…

Linux系统之美:环境变量的概念以及基本操作

本节重点 理解环境变量的基本概念学会在指令和代码操作上查询更改环境变量环境变量表的基本概念父子进程间环境变量的继承与隔离 一、引入 1.1 自定义命令(我们的exe) 我们以往的Linux编程经验告诉我们,我们在对一段代码编译形成可执行文件后…

尝试在软考65天前开始成为软件设计师-计算机网络

OSI/RM 七层模型 层次名功能主要协议7应用层实现具体应用功能 FTP(文件传输)、HTTP、Telnet、 POP3(邮件)SMTP(邮件) ------- DHCP、TFTP(小文件)、 SNMP、 DNS(域名) 6表示层数据格式,加密,压缩.....5会话层建立,管理&终止对话4传输层端到端连接TCP,UDP3网络层分组传输&a…

基于随机森林回归预测葡萄酒质量

基于随机森林回归预测葡萄酒质量 1.作者介绍2.随机森林算法与数据集介绍2.1定义2.2核心思想2.3主要步骤2.4数据集介绍 3.算法实现3.1数据加载与探索3.2数据可视化3.3数据预处理(标准化、划分训练/测试集)3.4模型训练与优化(随机森林回归 超参…

【赵渝强老师】在Docker中运行达梦数据库

Docker是一个客户端服务器(Client-Server)架构。Docker客户端和Docker守护进程交流,而Docker的守护进程是运作Docker的核心,起着非常重要的作用(如构建、运行和分发Docker容器等)。达梦官方提供了DM 8在Doc…

【C语言】深入理解指针(二):从数组到二维数组的指针魔法

前言 在C语言中,指针一直是一个神秘而强大的存在。它不仅可以帮助我们高效地操作内存,还能让代码更加灵活和高效。今天,我们就来深入探讨指针的多种用法,从数组到二维数组,一步步揭开指针的神秘面纱。 一、数组名的指…

【MySQL】事务

目录 基本概念事务操作自动提交事务开启事务提交事务回滚事务代码示例 事务的特性 ACID事务的隔离级别读未提交 read uncommitted读已提交 read committed可重复读 repeatable read序列化(串行) serializable操作示例 基本概念 在 MySQL 中的事务&#…