擅长:python、mysql、java
<p>所以您想要有相对于早期导入的import语句?你知道吗</p>
<p>肯定是我曾经试过的。我有一些很长的import语句,它们有一个共同的根,所以我试着把它分解出来。我无法让它与直接的导入语句一起工作,但可能我没有足够努力。你知道吗</p>
<p>请记住,import语句的默认行为将创建一个模块对象。它会把它绑在一起系统模块,然后使用import语句中的名称将其绑定到当前模块的命名空间中。见<a href="http://docs.python.org/tutorial/modules.html" rel="nofollow noreferrer">http://docs.python.org/tutorial/modules.html</a>。你知道吗</p>
<p>模块对象具有命名空间。如果一个模块不是一个包,那么它的名称空间来自于对该模块的.py文件内容的求值。但是,如果它是一个包,那么名称空间来自包中的<code>__init__.py</code>模块。包中的其他模块不会自动导入,并且在包的命名空间中不可用。你必须分别导入它们。你知道吗</p>
<p>from…import语句将模块加载到系统模块. 然后它会将对象从导入中引用的模块中拉出。最后,它使用import语句中的名称将该对象绑定到当前模块的命名空间中。基本上是将绑定从一个命名空间复制到另一个命名空间。老实说,我发现当你以后使用它时,它通常会混淆名称的来源(所以我不怎么做)。你知道吗</p>
<p>切中要害:</p>
<p>使用<code>__import__</code>是绕过import语句限制的一种方法。见<a href="http://docs.python.org/library/functions.html#__import__" rel="nofollow noreferrer">the python documentation</a>。但是,如果使用from..import语句,不要尝试重用<code>__import__</code>中的结果名称,除非它指向模块对象(可能不是)。导入只需要一个以点分隔的模块名序列。你知道吗</p>
<p>另外,请记住,仅放置显式导入可能是指示对象来自何处的更干净的方法。你知道吗</p>