
正如描述的蟒蛇文档中,当蟒蛇看到它下面的一些事情的import语句:
- 检查一些全局表(如果模块已经导入)
- 如果未导入模块,python将其导入,创建模块对象,并将新创建的模块对象放入全局表
- 如果模块是导入的python只是获取模块对象
- 当python有模块对象时,它将其绑定到您选择的名称
- 如果它是
import foo
模块的名称foo
将是foo
- 如果它是
import foo as bar
模块的名称foo
将是bar
- 如果是
from foo import bar as baz
python ,则bar
在模块中查找函数(或其他函数)foo
并将该函数绑定到namebaz
- 如果它是
因此,每个模块仅导入一次。
为了更好地理解导入机制,我建议创建一个玩具示例。
档案
module.py:
print("import is in progress")def foo(): pass档案
main.py:
def foo(): print("before importing module") import module module.foo() print("after importing module")if __name__ == '__main__': foo() foo()将以上文件放入同一目录。当
module.py正在导入它打印
import is inprogress。启动时
main.py,它将尝试
module多次导入,但输出将是:
before importing moduleimport is in progressafter importing modulebefore importing moduleafter importing module
因此导入实际上只发生一次。您可以调整此玩具示例以检查您感兴趣的案例。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)