当前位置: 首页 > news >正文

八、Python模块、包

目录

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 + bdef 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, module2module1.func1()
module2.func2()

或直接导入函数

from mypackage.module1 import func1
from mypackage.module2 import func2func1()
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"]

相关文章:

  • 第四十五天打卡
  • PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的区别
  • React 第五十四节 Router中useRevalidator的使用详解及案例分析
  • AI智能推荐实战之RunnableParallel并行链
  • Haproxy的基础配置
  • AI问答-vue3+ts+vite:http://www.abc.com:3022/m-abc-pc/#/snow 这样的项目 在服务器怎么部署
  • vue+element-ui一个页面有多个子组件组成。子组件里面有各种表单,实现点击enter实现跳转到下一个表单元素的功能。
  • Excel-vlookup -多条件匹配,返回指定列处的值
  • sanitizer工具
  • 三表查询SQL怎么写?----小白初学+案例引入
  • Compose Multiplatform 实现自定义的系统托盘,解决托盘乱码问题
  • [Java 基础]数组
  • 世事无常,比较复杂,人可以简单一点
  • 钢轨滚动疲劳试验机
  • Spring框架知识体系全面总结
  • 图简记。。
  • 设计模式域——软件设计模式全集
  • 【Web应用】若依框架:基础篇21二次开发-页面调整
  • ceph pool 修改故障域
  • 【java面试】框架篇
  • 哪个网站有老外教做蛋糕/软文范文大全1000字
  • 企业网站上海 优帮云/百度收录量
  • 查看服务器上的网站/网站seo哪家做的好
  • php网站开发心得/优化网络推广外包
  • 网站设计制作哪种快/cba排名最新排名
  • 淘宝网发布网站建设/万网注册域名查询官方网站