__import__简介

__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被返回。

可以看下面的例子:

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

名字为 spam 的模块被导入;

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

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

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

1 _temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], -1)
2 eggs = _temp.eggs  
3 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.



 
posted @ 2015-08-31 15:33  arvinls  阅读(221)  评论(0编辑  收藏  举报