1.1.5 模块与包——AI教你学Django

1.1.5 模块与包(Django 基础学习细节)

模块和包是 Python 项目组织和代码复用的基础。Django 项目本质上就是由多个模块和包组成。理解和灵活运用模块与包机制,是写好大型项目的关键。

一、import、from-import、as 的用法

1. import

  • 用于导入整个模块,模块名为文件名(不带 .py)。

  • 用法:

    python 复制代码
    import math
    print(math.sqrt(16))  # 4.0

2. from ... import ...

  • 用于从模块或包中导入指定成员(变量、函数、类等)。

  • 用法:

    python 复制代码
    from math import sqrt, pi
    print(sqrt(9))  # 3.0
    print(pi)       # 3.141592653589793

3. as

  • 用于给模块或成员起别名,简化书写或防止命名冲突。

  • 用法:

    python 复制代码
    import numpy as np
    from datetime import datetime as dt
    print(np.array([1, 2, 3]))
    now = dt.now()

4. 多层包导入

  • 支持多级包结构:

    python 复制代码
    from myproject.utils.tools import my_func

二、name == "main"

1. 含义

  • 每个 Python 文件都作为一个模块,模块有一个 __name__ 属性。
  • 如果模块被直接运行,__name__ == "__main__";如果被导入,__name__ 等于模块名。

2. 作用

  • 只在脚本直接运行时执行某段代码,导入时不执行。
  • 常用于编写测试代码、命令行入口。

3. 示例

python 复制代码
# foo.py
def say_hi():
    print("Hi!")

if __name__ == "__main__":
    say_hi()    # 直接运行 foo.py 时会执行
python 复制代码
# bar.py
import foo  # 导入 foo.py,不会执行 if __name__ == "__main__" 下的内容

三、sys.path

1. sys.path 的作用

  • 是一个列表,包含所有 Python 查找模块的目录。
  • 可动态添加搜索路径,方便跨目录导入。

2. 示例

python 复制代码
import sys
print(sys.path)
sys.path.append("/path/to/my/modules")
# 现在可以 import 该目录下的模块

3. 应用场景

  • 复杂项目/部署时临时添加自定义模块路径
  • 避免命名冲突和导入错误

四、包的初始化(init.py)

1. 包的概念

  • 包是包含多个模块的文件夹,必须包含一个 __init__.py 文件(可为空)。
  • __init__.py 的存在使 Python 将该目录识别为包。

2. init.py 的作用

  • 初始化包(如导入常用模块、定义包级变量/函数等)
  • 控制子模块的导出(通过 all
  • 可以写包级别的初始化逻辑

3. 示例结构

复制代码
myproject/
├── __init__.py
├── foo.py
├── bar.py
python 复制代码
# myproject/__init__.py
from .foo import say_hi
from .bar import some_func
  • 导入包时自动执行 __init__.py 代码:
python 复制代码
import myproject
myproject.say_hi()

4. all 控制包成员

python 复制代码
# __init__.py
__all__ = ["foo", "bar"]
  • from myproject import * 时只导入 foo, bar

五、模块与包在 Django 项目中的应用

六、实用小结

  • 用 import/from-import/as 灵活组织和复用代码
  • __name__ == "__main__" 编写可测试或可复用模块
  • sys.path 控制模块搜索路径,解决复杂项目的导入问题
  • __init__.py 是包的标识和初始化位置,建议始终保留即使为空
相关推荐
看我干嘛!2 分钟前
第三次python作业
服务器·数据库·python
deephub3 分钟前
用 PyTorch 实现 LLM-JEPA:不预测 token,预测嵌入
人工智能·pytorch·python·深度学习·大语言模型
我的xiaodoujiao27 分钟前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 44--将自动化测试结果自动推送至钉钉工作群聊
前端·python·测试工具·ui·pytest
沈浩(种子思维作者)27 分钟前
铁的居里点(770度就不被磁铁吸了)道理是什么?能不能精确计算出来?
人工智能·python·flask·量子计算
yufuu9829 分钟前
使用Scikit-learn进行机器学习模型评估
jvm·数据库·python
计算机毕业编程指导师41 分钟前
大数据可视化毕设:Hadoop+Spark交通分析系统从零到上线 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·spark·毕业设计·城市交通
计算机毕业编程指导师1 小时前
【计算机毕设选题】基于Spark的车辆排放分析:2026年热门大数据项目 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·spark·毕业设计·车辆排放
浔川python社1 小时前
浔川社团关于产品数据情况的官方通告
python
生活很暖很治愈1 小时前
GUI自动化测试[3]——控件&数鼠标操作
windows·python·功能测试·测试工具
老蒋每日coding1 小时前
Python3基础练习题详解,从入门到熟练的 50 个实例(一)
开发语言·python