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 是包的标识和初始化位置,建议始终保留即使为空
相关推荐
荷蒲7 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)9 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机9 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor69210 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy10 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽11 小时前
真实即粗糙,光滑是伪造
人工智能·python
一次旅行11 小时前
Attention机制从数学到工程:拆解缩放点积+多头注意力|附可运行PyTorch实现与踩坑指南
人工智能·pytorch·python
泡干脆面就番茄11 小时前
NumPy 科学计算完全指南:从数组创建到广播机制
python·numpy
denggun1234511 小时前
信号量(DispatchSemaphore vs AsyncSemaphore)、swift协作式线程池 and python信号量
开发语言·python·swift
起光11 小时前
Python类与对象(一)
python