You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中import *导入行为与前置子模块导入的关联咨询

Python包import *与子模块导入的行为解析

是的,如果没有提前执行import sound.effects.echo和import sound.effects.surround,这两个子模块不会被from sound.effects import *导入。

核心规则说明

Python中,使用import *导入包时,默认行为遵循以下逻辑:

  • 如果包的__init__.py文件定义了__all__列表,import *只会导入列表中指定的名字(通常是子模块名或包内定义的对象);
  • 如果没有__all__,import *只会导入__init__.py中定义的、不以下划线_开头的名字,不会自动递归加载并导入所有子模块。

前置导入语句的作用

当你显式执行import sound.effects.echo和import sound.effects.surround后:

  1. 这两个子模块会被实际加载到内存中;
  2. 它们会被注册为sound.effects包的属性(即可以通过sound.effects.echo访问到该子模块);
  3. 此时再执行from sound.effects import *,就会把这些已经被加载到包命名空间里的子模块也纳入导入范围,也就是教程里提到的“包括之前import语句显式加载的包的任何子模块”。

简单说,前置导入相当于提前把子模块“挂载”到了父包的命名空间中,让import *能识别并导入它们。

内容的提问来源于stack exchange,提问作者rish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:10:36