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 是包的标识和初始化位置,建议始终保留即使为空
相关推荐
Python图像识别18 小时前
71_基于深度学习的布料瑕疵检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
python·深度学习·yolo
千码君201619 小时前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
淮北49420 小时前
windows安装minicoda
windows·python·conda
爱喝白开水a21 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
默默coding的程序猿1 天前
3.git的分支携带问题是什么?怎么解决?
java·git·python·svn·gitee·github·intellij-idea
新子y1 天前
【小白笔记】PyTorch 和 Python 基础的这些问题
pytorch·笔记·python
我是李武涯1 天前
PyTorch DataLoader 高级用法
人工智能·pytorch·python
Lynnxiaowen1 天前
今天我们开始学习python语句和模块
linux·运维·开发语言·python·学习
ThreeAu.1 天前
pytest 实战:用例管理、插件技巧、断言详解
python·单元测试·pytest·测试开发工程师
资源补给站1 天前
服务器高效操作指南:Python 环境退出与 Linux 终端快捷键全解析
linux·服务器·python