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

AI(day10)模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理

核心概念

模块

  • 本质:一个包含 Python 代码的 .py 文件
  • 作用:组织相关功能(函数、类、变量)
  • 示例:math.py(包含数学函数)、utils.py(自定义工具)

  • 本质:包含 __init__.py 文件的特殊目录
  • 作用:组织相关模块,形成层次结构
  • 示例:
my_package/__init__.pymodule1.pymodule2.pysubpackage/__init__.pymodule3.py

导入机制

  • import module: 导入整个模块 → import math → math.sqrt(4)
  • from module import name: 导入特定对象 → from math import sqrt → sqrt(4)
  • import module as alias: 设置别名 → import numpy as np → np.array()

关键实践技巧

1.导入优化

# 推荐
import numpy as np
from matplotlib import pyplot as plt# 避免(导致命名空间污染)
from math import *

from math import *会导致命名空间污染,因为它无选择地将math模块中所有的公开名字都引入当前命名空间,可能会覆盖已有名字,也会引入大量可能不需要的名字。因此,在编写正式代码时,应该避免使用这种导入方式,而使用显式导入。
示例:

   pi = 3.14   # 自定义的pifrom math import *   # 会导入math.pi,覆盖自定义的piprint(pi)   # 输出3.141592653589793,而不是3.14

2.__init__.py__all__妙用

    1. __init__.py的作用
    • 当导入包(import package)或使用from package import something时,会执行__init__.py文件。
    • __init__.py中导入的内容会成为包级别的属性。
    1. __all__的作用
    • 当使用from package import *时,__all__变量定义了哪些名称会被导入。
    • 如果没有定义__all__,则不会导入任何名称(除了那些在__init__.py中显式导入的,且非以下划线开头的名称)。

示例:如何通过__init__.py简化导入路径
假设我们有如下包结构:

mypackage/__init__.pymodule1.pymodule2.py

其中,module1.py内容:

def func1():print("Function 1 from module1")class Class1:passdef _True():pass

module2.py内容:

def func2():print("Function 2 from module2")class Class2:pass
  • 情况1:不使用__init__.py简化导入

用户需要这样导入:

from mypackage.module1 import func1, Class1
from mypackage.module2 import func2, Class2
  • 情况2:在__init__.py中简化导入

mypackage/__init__.py中:

from .module1 import *
from .module2 import *
# 定义__all__,这样使用 from mypackage import * 时,会导入这四个名称
__all__ = ['func1','Class1','func2','Class2','_True','_true'
]def _true():print("_ture")

这样,用户就可以直接这样导入:

from mypackage import func1, Class1, func2, Class2

或者使用 * 导入(因为我们在__all__中定义了)

from mypackage import *
func1()   # 直接使用func1,而不需要写mypackage.module1.func1
_True()	  # 用__all__定义也不能使用,下划线开头属于module1.py私有属性
_true()	  # _true()定义在__init__.py内部,用__all__定义也能使用

常用系统模块速查表

模块名主要功能典型用法示例
os操作系统交互os.listdir(), os.path.join()
sysPython解释器交互sys.argv, sys.exit()
math数学运算math.sin(), math.pi
datetime日期时间处理datetime.now(), timedelta
jsonJSON数据编码/解码json.loads(), json.dump()
re正则表达式操作re.search(), re.findall()
random生成随机数random.randint(), random.choice()
urllib.request网络请求urllib.request.urlopen()
collections扩展数据类型deque, namedtuple, Counter
argparse命令行参数解析创建命令行工具必备

第三方模块管理

1.pip - 包安装工具

# 安装包
pip install requests numpy pandas# 安装特定版本
pip install Django==3.2.18# 升级包
pip install --upgrade pandas# 卸载包
pip uninstall package-name

2.虚拟环境(必备实践)

  • 作用:隔离项目依赖,防止版本冲突

  • 创建与激活:

# 创建
python -m venv myenv# 激活 (Windows)
myenv\Scripts\activate# 激活 (macOS/Linux)
source myenv/bin/activate

3.依赖管理

  • 生成依赖清单:
pip freeze > requirements.txt
  • 安装项目所有依赖:
pip install -r requirements.txt
http://www.dtcms.com/a/286680.html

相关文章:

  • AE PDW2200电源射频手侧使用安装说明含电路图
  • 70 gdb attach $pid, process 2021 is already traced by process 2019
  • 反序列化漏洞3-反序列化漏洞讲解演示
  • 4. PyQGIS整体框架详解
  • Agent AI(3):Agent分类
  • day30——零基础学嵌入式之线程2.0
  • 多线程-2-线程间通信
  • 推荐算法召回:架构理解
  • 【RK3576】【Android14】开发环境搭建
  • Windows 下 VS2019 编译 libevent-2.1.10 库
  • React 实现人员列表多选、全选与取消全选功能
  • 大疆司空2私有化部署报错解决方案
  • 谷歌浏览器Chrome的多用户配置文件功能
  • Python分组柱形图绘制全攻略
  • 题解:CF1866D Digital Wallet
  • 熔断和降*的区别
  • 使用pt-toolkit工具包进行MySQL性能优化实战指南
  • 算法训练营day24 回溯算法③ 93.复原IP地址 、78.子集、 90.子集II
  • AWS SSL证书无缝迁移完整指南 - 零业务中断方案
  • Python 进程间通信:TCP安全加密数据传输
  • H3CNE小小综合实验
  • 模拟数据生成---使用NGS数据模拟软件VarBen
  • SLM343CK-DG Sillumin数明半导体高性能LED驱动芯片 抗干扰+耐高温 车载照明专用
  • 二叉树(建立 + 遍历 + 拓展)
  • 外部DLL创建及使用
  • 灵巧手(具身智能入门十一)
  • if (a == 1 a == 2 a == 3)返回true的问题思考
  • NVIDIA 驱动安装失败问题排查与解决(含离线 GCC 工具链安装全过程)
  • MySQL组内拼接group_concat函数
  • MyUI会员排名VcMember组件文档