核心要点

  • 知道 .py 文件即模块、包需 init.py(或 namespace package)

  • 掌握 import / from ... import 与 name == main

  • 了解模块搜索路径 sys.path

简要回答

把代码保存为 .py 即模块;目录加 init.py 成包;用 import 导入;直接运行脚本时 name 为 "main"。

标准回答

一、先给出结论和背景

  • 模块:任意 .py 文件即模块,文件名(去 .py)为模块名。
  • 包(Package):含 __init__.py 的目录(Python 3.3+ namespace package 可无 init)。支持 pkg.submod 层级导入。

二、拆开关键步骤和判断点

  • 导入:示例代码可以这样理解:
    import mymod
    from mypkg import utils
    from mypkg.utils import helper as h
  • 入口守卫:示例代码可以这样理解:
    if name == "main":
    main() # 仅直接 python script.py 时执行

三、补上落地边界和取舍

  • 搜索路径:当前目录、PYTHONPATH、site-packages。项目结构常用 src layout + 虚拟环境。
  • AI 项目models/, data/, train.py 分模块;pip install -e . 可编辑安装本地包。

回答时可以顺手补一个真实项目结构:训练脚本放在 scripts/train.py,模型定义放在 src/project/models.py,数据处理放在 src/project/data.py,通过包导入而不是到处改 sys.path。这样能说明你知道模块化的目的不是“文件拆开”,而是让训练、推理、测试和复用都更稳定。

回答思路

  • 【定义】用一句话说清「如何在 Python 中创建模块」

  • 【原理】讲清关键机制或步骤(2~3 点)

  • 【例子】举一个真实项目、论文或产品中的例子

  • 【对比】与易混淆概念或替代方案比较(如有)

  • 【收尾】总结适用场景 + 一个局限或风险

延伸学习

结合侧栏延伸学习中的知识库与术语;行业背景见 AI 资讯(永久保留)。相关:资讯

常见误区

⚠️ 常见踩坑

误区一:容易答偏的地方:只罗列名词、不会举例;混淆相似概念;忽略工程约束(成本、延迟、数据质量)。不确定时应主动说明假设。

追问

追问 1import 时模块代码会执行几次?

每个解释器进程内,模块首次 import 时顶层代码执行一次,结果缓存在 sys.modules;后续 import 直接取缓存。importlib.reload() 可强制重载。

追问 2__init__.py 里通常写什么?

包初始化、导出公共 API(__all__)、聚合子模块导入。可为空文件仅标记包。避免在 __init__.py 放重量级副作用代码拖慢 import。

追问 3相对导入和绝对导入如何选择?

包内模块互引用用 from . import siblingfrom ..parent import x。脚本直接运行时不应依赖相对导入(无包上下文)。库开发推荐绝对导入更清晰。

🔗 相似问题

同一考点的不同问法,换着练更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习