八、Python模块、包

news2025/6/6 13:44:31

目录

1. 模块

1.1 什么是模块?

1.2 创建模块

1.3 导入模块

1.4 模块的命名空间

1.5 模块的搜索路径

1.6 模块的重新加载

2. 包

2.1 什么是包?

2.2 创建包

2.3 导入包中的模块

2.4 包的层次结构

3. 模块和包的管理

3.1 安装模块

3.2 卸载模块

3.3 列出已安装的模块

4. 模块和包的最佳实践

4.1 模块命名

4.2 包结构

4.3 避免循环导入

4.4使用 __all__ 控制公开接口


1. 模块

1.1 什么是模块?

一个模块是一个包含 Python 定义和语句的文件。模块的文件名以 .py 结尾。通过将代码组织到模块中,可以实现代码的复用和更好的结构化管理。

1.2 创建模块

要创建一个模块,只需在一个文件中编写 Python 代码并保存为 .py 文件。

示例:创建一个模块 mymodule.py

# 定义一个函数
def greet(name):
    print(f"Hello, {name}!")

# 定义一个变量
version = "1.0.0"

# 定义一个类
class Calculator:
    def add(self, a, b):
        return a + b

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

1.3 导入模块

可以使用 import 语句导入模块,并使用模块中的函数、变量和类。

示例:导入并使用 mymodule

import mymodule

# 使用模块中的函数
mymodule.greet("Alice")

# 使用模块中的变量
print(mymodule.version)

# 使用模块中的类
calc = mymodule.Calculator()
print(calc.add(5, 3))  # 输出:8

1.4 模块的命名空间

每个模块都有自己的命名空间,这避免了名称冲突。模块中的变量、函数和类不会与导入模块的命名空间冲突。

1.5 模块的搜索路径

当你导入一个模块时,Python 会在以下位置按顺序查找模块:

  1. 当前工作目录。

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

  3. Python 安装目录中的默认路径。

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

import sys
print(sys.path)

1.6 模块的重新加载

一旦模块被导入,它就不会再次加载。如果需要重新加载模块,可以使用 importlib.reload()

示例:重新加载模块

import importlib
import mymodule

# 修改 mymodule 后重新加载
importlib.reload(mymodule)

2. 

2.1 什么是包?

包是一种包含多个模块的文件夹,用于组织模块的层次结构。包必须包含一个 __init__.py 文件(可以为空),以标识这是一个包。

2.2 创建包

要创建一个包,只需创建一个文件夹,并在其中添加 __init__.py 文件和其他模块文件。

示例:创建包 mypackage

mypackage/
├── __init__.py
├── module1.py
└── module2.py

__init__.py 的内容

# 可以在 __init__.py 中初始化包或定义包级别的变量
print("Package initialized.")

module1.py 的内容

def func1():
    print("Function 1 from module1.")

module2.py 的内容

def func2():
    print("Function 2 from module2.")

2.3 导入包中的模块

可以使用 import 语句导入包中的模块。

示例:导入并使用包中的模块

# 导入整个包
import mypackage

# 导入包中的特定模块
import mypackage.module1
import mypackage.module2

# 使用模块中的函数
mypackage.module1.func1()
mypackage.module2.func2()

或使用 from ... import ... 语法

from mypackage import module1, module2

module1.func1()
module2.func2()

或直接导入函数

from mypackage.module1 import func1
from mypackage.module2 import func2

func1()
func2()

2.4 包的层次结构

可以创建嵌套的包结构,以实现更复杂的层次组织。

示例:创建嵌套包

mypackage/
├── __init__.py
├── submodule/
│   ├── __init__.py
│   ├── submodule1.py
└── module1.py

导入嵌套包中的模块

from mypackage.submodule.submodule1 import func

3. 模块和包的管理

3.1 安装模块

可以使用 pip 安装第三方模块。

示例:安装 requests 模块

pip install requests

3.2 卸载模块

可以使用 pip 卸载已安装的模块。

示例:卸载 requests 模块

pip uninstall requests

3.3 列出已安装的模块

可以使用 pip list 查看已安装的模块。

pip list

4. 模块和包的最佳实践

4.1 模块命名

模块名应简洁明了,避免使用保留字和内置函数名。

4.2 包结构

合理设计包的结构,避免过深的嵌套。包的层次结构应反映项目的逻辑结构。

4.3 避免循环导入

循环导入(即两个模块互相导入)会导致错误,应尽量避免。

4.4使用 __all__ 控制公开接口

可以在模块中定义 __all__ 列表,指定哪些名称会被 from module import * 导入。

示例:定义 __all__

__all__ = ["func1", "func2"]

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

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

相关文章

使用交叉编译工具提示stubs-32.h:7:11: fatal error: gnu/stubs-soft.h: 没有那个文件或目录的解决办法

0 前言 使用ST官方SDK提供的交叉编译工具、cmake生成Makefile,使用make命令生成可执行文件提示fatal error: gnu/stubs-soft.h: 没有那个文件或目录的解决办法,如下所示: 根据这一错误提示,按照网上的解决方案逐一尝试均以失败告…

macOS 连接 Docker 运行 postgres,使用navicat添加并关联数据库

下载 docker注册一个账号,登录 Docker创建 docke r文件 mkdir -p ~/.docker && touch ~/.docker/daemon.json写入配置(全量替换) {"builder": {"gc": {"defaultKeepStorage": "20GB",&quo…

指针的使用——基本数据类型、数组、结构体

1 引言 对于学习指针要弄清楚如下问题基本可以应付大部分的场景: ① 指针是什么? ② 指针的类型是什么? ③ 指针指向的类型是什么? ④ 指针指向了哪里? 2 如何使用指针 任何东西的学习最好可以总结成一种通用化的…

TK海外抢单源码/指定卡单

​ 抢单源码,有指定派单,打针,这套二改过充值跳转客服 前端vue 后端php 两端分离 可二开 可以指定卡第几单,金额多少, 前后端开源 PHP7.2 MySQL5.6 前端要www.域名,后端要admin.域名 前端直接静态 伪静…

【Linux】Linux 环境变量

参考博客:https://blog.csdn.net/sjsjnsjnn/article/details/125533127 一、环境变量 1.1 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C代码的时候,在链接的时候&am…

OpenCV在图像上绘制文字示例

OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 OpenCV中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数,用于在图像上绘制文字。这个函数是putText(),它是命名空间cv中的函数,其声明如下&#xff…

为什么要选择VR看房?VR看房有什么优点?

VR看房:革新传统,重塑体验 在当今社会,虚拟现实(VR)技术正以前所未有的速度渗透到我们生活的各个领域,其中VR看房作为房地产领域的重要创新。本文将讨论为什么要选择VR看房以及VR看房的主要优点&#xff0…

pytorch基本运算-范数

引言 前序学习进程中,已经对pytorch基本运算有了详细探索,文章链接有: 基本运算 广播失效 乘除法和幂运算 hadamard积、点积和矩阵乘法 上述计算都是以pytorch张量为运算元素,这些张量基本上也集中在一维向量和二维矩阵&#x…

Transformer实战——词嵌入技术详解

Transformer实战——词嵌入技术详解 0. 前言1. 词嵌入基础2. 分布式表示3. 静态嵌入3.1 Word2Vec3.2 GloVe 4. 使用 Gensim 构建词嵌入5. 使用 Gensim 探索嵌入空间6. 动态嵌入小结系列链接 0. 前言 在本节中,我们首先介绍词嵌入的概念,然后介绍两种实现…

[pdf、epub]300道《软件方法》强化自测题业务建模需求分析共257页(202505更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 在本账号CSDN资源下载,或者访问链接: http://www.umlchina.com/url/quizad.html 如果需要提取码:umlc 文件夹中的“300道软件方法强化自测题2025…

Vue3入门指南:从零到精通的快速上手

齐爷学vue3 一、Vue3入门 vite:前端构架工具,构建速度快于webpack。轻量快速、对TS,JSX,CSS开箱即用、按需编译。 创建Vue3工程 1.在想要创建Vue3的位置打开cmd,执行如下命令。 npm create vuelatest 2.功能只选择…

吴恩达MCP课程(5):mcp_chatbot_prompt_resource.py

前提条件: 1、吴恩达MCP课程(5):research_server_prompt_resource.py 2、server_config_prompt_resource.json文件 {"mcpServers": {"filesystem": {"command": "npx","args"…

设计模式——抽象工厂设计模式(创建型)

摘要 抽象工厂设计模式是一种创建型设计模式,旨在提供一个接口,用于创建一系列相关或依赖的对象,无需指定具体类。它通过抽象工厂、具体工厂、抽象产品和具体产品等组件构建,相比工厂方法模式,能创建一个产品族。该模…

基于LocalAI与cpolar技术协同的本地化AI模型部署与远程访问方案解析

文章目录 前言1. Docker部署2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址前言 各位极客朋友们!今天要向大家推荐一套创新性的本地部署方案——LocalAI技术架构。这款开源工具包能够将普通配置的笔记本电脑转化为具备强大算力的AI工作站,轻松实现…

霍尔效应传感器的革新突破:铟化铟晶体与结构演进驱动汽车点火系统升级

一、半导体材料革新:铟化铟晶体的电压放大机制 铟化铟(InSb)晶体因其独特的能带结构,成为提升霍尔电压的关键材料。相较于传统硅基材料,其载流子迁移率高出3-5倍,在相同磁场强度下可显著放大霍尔电压。其作…

无法运用pytorch环境、改环境路径、隔离环境

一.未建虚拟环境时 1.创建新项目后,直接运行是这样的。 2.设置中Virtualenv找不到pytorch环境?因为此时没有创建新虚拟环境。 3.选择conda环境(全局环境)时,是可以下载环境的。 运行结果如下: 是全局环境…

从0开始学vue:pnpm怎么安装

一、什么是 pnpm? pnpm(Performant npm)是新一代 JavaScript 包管理器,优势包括: 节省磁盘空间:通过硬链接和符号链接实现高效存储安装速度更快:比 npm/yarn 快 2-3 倍内置工作区支持&#xf…

Python 网络编程 -- WebSocket编程

作者主要是为了用python构建实时网络通信程序。 概念性的东西越简单越好理解,因此,下面我从晚上摘抄的概念 我的理解。 什么是网络通信? 更确切地说,网络通信是两台计算机上的两个进程之间的通信。比如,浏览器进程和新浪服务器上的某个Web服务进程在通…

边缘计算应用实践心得

当数据中心的光纤开始承载不了爆炸式增长的物联网数据流时,边缘计算就像毛细血管般渗透进现代数字肌理的末梢。这种将算力下沉到数据源头的技术范式,本质上是对传统云计算中心化架构的叛逆与补充——在智能制造车间里,实时质检算法直接在工业…

EXCEL如何快速批量给两字姓名中间加空格

EXCEL如何快速批量给姓名中间加空格 优点:不会导致排版混乱 缺点:无法输出在原有单元格上,若需要保留原始数据,可将公式结果复制后“选择性粘贴为值” 使用场景:在EXCEL中想要快速批量给两字姓名中间加入空格使姓名对…