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 是包的标识和初始化位置,建议始终保留即使为空
相关推荐
SEO_juper4 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
用户8356290780515 小时前
使用 Python 对 Excel 工作表进行排序
后端·python
for_ever_love__5 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
用户8356290780516 小时前
使用 Python 合并 PowerPoint 演示文稿
后端·python
weixin_461769406 小时前
VS Code 中创建 Jupyter 文件(.ipynb)
ide·python·jupyter
2601_966949656 小时前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
全栈弄潮儿6 小时前
Python实战第1期:Python环境搭建与第一个程序
python
心易行者6 小时前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache
weixin199701080167 小时前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存
布吉岛的石头7 小时前
Java 程序员第 49 阶段11:Java 接 BERT:用 ONNX Runtime 做句向量推理
java·人工智能·python·深度学习·bert·transformer