__import__()

    import 语句通过调用__import__()来完成工作,提供这个函数是为了让有特殊需要的用户覆盖他,实现自定义。__import__最大的好处就是可以使程序在runtime时动态加载一些模块,而不是在py文件的开头使用import来加载。
 

官方文档如下

__import__name[,globals[, locals[,fromlist[, level]]]]

Note

这个函数导入模块name;globals, locals 默认为globals(), locals();formlist给定了要导入的对象或者子模块的名字。level参数决定是使用相对路径还是绝对路径导入,默认值为-1,代表绝对和相对路径都可以。0值意味着仅仅接收绝对路径导入,正值代表对于调用__import__()的模块目录的父目录的数目。Positive values forlevel indicate the number of parent directories to search relative to the directory of the module calling__import__().

当name变量是package.module形式的时候,正常情况下仅仅顶层的包(第一个 . 前面的package)会被返回,而不是package.module。然而当fromlist参数非空时,模块package.module被返回。

可以看下面的例子:

spam = __import__('spam', glocals(), locals())

spam = __import__('spam.ham', globals(), locals(), [])

这里仍然导入的是 spam 模块,而不是 spam.ham;

如果想要导入spam.ham那么就需要制定后面的fromlist参数:

 _temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], -1)
eggs = _temp.eggs
saus = _temp.sausage

相当于;from spam.ham import eggs, sausage as saus

注意:这里__import__导入的不是spam.ham.eggs 和 spam.ham.sausage, 而是spam.ham, 必须经过后面两条赋值语句才可以等效于上面这种正常导入。

 

Changed in version 2.5: The level parameter was added.

Changed in version 2.5: Keyword support for parameters was added.

 
05-04 02:43