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 是包的标识和初始化位置,建议始终保留即使为空
相关推荐
批量小王子几秒前
2025-08-09通过授权码的方式给exe程序充值
笔记·python
mortimer6 分钟前
pydub下音频处理:跨越wav格式的4GB限制这道坎
python·ffmpeg·numpy
Dxy12393102161 小时前
Python合并两个PDF文件
python·pdf
OAFD.1 小时前
Matplotlib 入门到实战:从零开始学 Python 数据可视化
python·信息可视化·matplotlib
WSSWWWSSW1 小时前
Numpy科学计算与数据分析:Numpy广播机制入门与实践
python·数据挖掘·数据分析·numpy
q567315232 小时前
Rust爬虫与代理池技术解析
开发语言·爬虫·python·rust
Dxy12393102162 小时前
Python如何合并两个Excel文件
爬虫·python·excel
fsnine3 小时前
数字图像处理基础——opencv库(Python)
人工智能·python·opencv
傻啦嘿哟3 小时前
Django模型开发全解析:字段、元数据与继承的实战指南
数据库·sqlite
Yc98014 小时前
解决:开启魔法后vscode pip命令不能安装中科大python镜像问题
vscode·python·pip