python 导入 * 模块说明

14ifxucb  于 2023-01-16  发布在  Python
关注(0)|答案(2)|浏览(172)

Python教程在第6章“模块”中提到了以下语句。

  • “它还包括由以前的import语句显式加载的程序包的任何子模块。"*

问题是,如果之前没有import语句

import sound.effects.echo
import sound.effects.surround

,echo和surround是否不导入?如果是,使用上述两个import语句***exactly***如何改变import * 的行为?

bq9c1y66

bq9c1y661#

带点的模块名并不意味着包含它的软件包上存在任何属性,尽管语法相同。软件包sound并不一定有一个名为effects的属性,尽管模块名sound.effects指的是包含在软件包sound中的一个名为effects的模块。
import sound.effects.echo执行以下操作:
1.将包sound绑定到当前范围中的名称sound
1.将模块sound.effects绑定到模块sound上名为effects的属性。
1.将模块sound.effects.echo绑定到模块sound.effects上名为echo的属性。
语句from sound.effects import *执行以下操作:
1.导入模块sound.effects,但 * 不 * 将其绑定到当前范围内的任何名称
1.对于在sound.effects.__all__中定义的每个模块全局,或者如果没有定义__all__,则对于没有以_为前缀的所有模块全局,在全局作用域中定义一个新名称,并将该名称绑定到相应的模块全局。

envsm3lx

envsm3lx2#

This很好地回答了这个问题。
基本上,import *将导入模块中的所有内容,* 除了任何子模块。*
您的代码将导入主sound模块,以及echosurround子模块。
这是一个很好的例子。

相关问题