Python教程在第6章“模块”中提到了以下语句。
问题是,如果之前没有import语句
import sound.effects.echo import sound.effects.surround
,echo和surround是否不导入?如果是,使用上述两个import语句***exactly***如何改变import * 的行为?
bq9c1y661#
带点的模块名并不意味着包含它的软件包上存在任何属性,尽管语法相同。软件包sound并不一定有一个名为effects的属性,尽管模块名sound.effects指的是包含在软件包sound中的一个名为effects的模块。import sound.effects.echo执行以下操作:1.将包sound绑定到当前范围中的名称sound1.将模块sound.effects绑定到模块sound上名为effects的属性。1.将模块sound.effects.echo绑定到模块sound.effects上名为echo的属性。语句from sound.effects import *执行以下操作:1.导入模块sound.effects,但 * 不 * 将其绑定到当前范围内的任何名称1.对于在sound.effects.__all__中定义的每个模块全局,或者如果没有定义__all__,则对于没有以_为前缀的所有模块全局,在全局作用域中定义一个新名称,并将该名称绑定到相应的模块全局。
sound
effects
sound.effects
import sound.effects.echo
sound.effects.echo
echo
from sound.effects import *
sound.effects.__all__
__all__
_
envsm3lx2#
This很好地回答了这个问题。基本上,import *将导入模块中的所有内容,* 除了任何子模块。*您的代码将导入主sound模块,以及echo和surround子模块。这是一个很好的例子。
import *
surround
2条答案
按热度按时间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__
,则对于没有以_
为前缀的所有模块全局,在全局作用域中定义一个新名称,并将该名称绑定到相应的模块全局。envsm3lx2#
This很好地回答了这个问题。
基本上,
import *
将导入模块中的所有内容,* 除了任何子模块。*您的代码将导入主
sound
模块,以及echo
和surround
子模块。这是一个很好的例子。