Python 导入深度
我注意到,导入一个模块时,会把它的函数和方法都导入进来,甚至连那些函数和方法里的东西也会被导入。请问,Python在导入一个上层模块时,有没有什么固定的规则,决定它会导入多少层的内容呢?
编辑
抱歉,我觉得之前的回答可能误解了我的意思。我想讨论的是嵌套文件夹的情况,比如在Django中,如果你导入了django,你可以访问到django.contrib.auth,但如果想访问django.contrib.auth.views,就必须专门导入它。我只是想知道,在这种情况下,是否总是只能导入两层。
第二次编辑
再澄清一下……在Django的例子中,文件结构是/django/contrib/auth/views.py,每个子文件夹都有一个"init.py"文件,这样它们就变成了模块,但这些模块里没有定义任何"all"属性。我的例子是否有问题,因为也许你不能用点语法来访问模块指定文件夹里的文件?
3 个回答
1
其实不是这样的。一个模块会从其他模块导入东西,因为它需要在这个模块里使用这些东西,否则它就会出问题。
1
没有预先定义的导入深度级别。导入语句的执行方式和其他Python语句一样。
但是,你可能会想,怎么避免循环导入呢?当一个模块第一次被导入时,它会被添加到sys.modules(也就是被缓存起来),这就是在执行导入语句时首先检查的地方。所以每个模块只会被加载一次,尽管它可能出现在很多导入语句中。
3
不,Python 会自动导入它需要的东西。不过,每个模块只会被导入一次。比如说,如果一个模块导入了 sys,另一个模块也导入了 sys,Python 不会真的重复导入两次。