python的导入机制包含三种主要方式:import语句,importlib.import_module() 和內建的__import__()函数。
一. import语句
import语句结合两个操作;它搜索指定的模块,然后将该搜索的结果绑定到本地作用域中的名称。 import语句的搜索操作被定义为使用适当的参数调用__import __()函数。 __import __()的返回值用于执行import语句的名称绑定操作。import语句与直接调用__import __()区别在于import语句会执行名称绑定操作,而__import __()不会。
import语句分两种:
1.基本导入语句(无from)
找到一个模块,如果需要,加载和初始化它在import语句发生的作用域的本地命名空间中定义一个或多个名称。当语句包含多个子句(由逗号分隔)时,为每个子句分别执行两个步骤,就像子句已被分离为单个import语句一样 当语句包含多个子句(由逗号分隔)时,为每个子句分别执行两个步骤,就像子句已被分离为单个import语句一样。查找过加载模块的过程详见下一篇。如果请求的模块被成功检索,它将通过以下三种方式之一在本地命名空间中可用:如果模块名称后跟as,则as后的名称直接绑定到导入的模块。如果没有指定其他名称,并且正在导入的模块是顶级模块,则模块的名称在本地命名空间中绑定为对导入模块的引用。如果正在导入的模块不是顶级模块,则包含该模块的顶级包的名称在本地命名空间中被绑定为对顶级包的引用。导入的模块必须使用其完全限定名称而不是直接访问。 2.from形式 找到在from子句中指定的模块,如果需要,加载和初始化它; 对于在import子句中指定的每个标识符:检查导入的模块是否具有该名称的属性如果没有,请尝试导入具有该名称的子模块,然后再次检查导入的模块的该属性如果找不到该属性,则会引发ImportError否则,对该值的引用存储在本地命名空间中,如果存在,则使用as子句中的名称,否则使用属性名称例子:import foo # foo imported and bound locallyimport foo.bar.baz # foo.bar.baz imported, foo bound locallyimport foo.bar.baz as fbb # foo.bar.baz imported and bound as fbbfrom foo.bar import baz # foo.bar.baz imported and bound as bazfrom foo import attr # foo imported and foo.attr bound as attr
新闻热点
疑难解答