Python
解释器有很多内建函数。下面是以字母顺序列出
__import__( name[, globals[, locals[, fromlist[, level]]]])
被
import
语句调用的函数。
它的存在主要是为了你可以用另外一个有兼容接口的函数
来
改变
import
语句的语义
.
为什么和怎么做的例子
,
标准库模块
ihooks
和
rexec.
也可以查看
imp,
它定义了有用的操作
,你可以创建你自己的
__import__()
函数
.
例如
,
语句
"import
spam"
结果对应下面的调用
:
__import__('spam',
globals(),
locals(),
[],
-1);
语句
"from spam.ham import eggs"
结果对应调用
"__import__('spam.ham', globals(), locals(),
['eggs'],
-1)".
注意即使
locals()
和
['eggs']
作为参数传递
,
__import__()
函数不会设置局部变量
eggs; import
语句后面的代码完成这项功能的
. (
实事上
,
标准的执行根本没有使用局部参数
,
仅仅使用
globals
决定
import
语句声明
package
的上下文
.)
当
name
变量是
package.module
的形式
,
正常讲
,
将返回顶层包
(
第一个点左边的部分
),
而
不是名为
name
的模块
.
然而
,
当指定一个非空的
formlist
参数,
将返回名为
name
的模块
.
这样做是为了兼容为不同种类的
import
语句产生的字节码
;
当使用
"import spam.ham.eggs",
顶层包
spam
必须在导入的空间中
,
但是当使用
"from
spam.ham
import
eggs",
必须使用
spam.ham
子包来查找
eggs
变量
.
作为这种行为的工作区间
,
使用
getattr()
提取需要的组件
.
例如
,
你可以定义下面
:
def my_import(name):
mod = __import__(name)
components = name.split('.')
for comp in components[1:]:
mod = getattr(mod, comp)
return mod
level
指定了是否使用相对或绝对导入
.
默认是
-1
将使用将尝试使用相对或绝对导入
.
0
仅
使用绝对导入
.
正数意味着相对查找模块文件夹的
level
层父文件夹中调用
__import__
。
abs( x)
返回一个数的绝对值。
参数也许是一个普通或长整型,
或者一个浮点数。
如果参数是一个复
数,返回它的积。
all( iterable)
如果迭代的所有元素都是真就返回真。
def all(iterable):
for element in iterable:
if not element:
return False
return True