当我读到答案时,我仍然觉得很奇怪,所以我尝试了下面的代码示例。
首先,尝试构建以下文件结构:tmpdir
|A
|__init__.py
| B.py
| C.py
现在A是package,而B或C是module。所以当我们在ipython中尝试类似的代码时:
其次,在ipython中运行示例代码:In [2]: kk = __import__('A',fromlist=['B'])
In [3]: dir(kk)
Out[3]:
['B',
'__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'__path__']
看来fromlist的工作原理和我们预期的一样。但当我们试图在一个module上做同样的事情时,事情就会变得复杂起来。假设我们有一个名为C.py的模块并在其中编码:handlers = {}
def hello():
print "hello"
test_list = []
所以现在我们试着做同样的事情。In [1]: ls
C.py
In [2]: kk = __import__('C')
In [3]: dir(kk)
Out[3]:
['__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'handlers',
'hello',
'test_list']
所以当我们只想导入测试列表时,它能工作吗?In [1]: kk = __import__('C',fromlist=['test_list'])
In [2]: dir(kk)
Out[2]:
['__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'handlers',
'hello',
'test_list']
结果显示,当我们尝试在module而不是package上使用fromlist时,fromlist参数根本没有帮助,因为module已经编译好了。一旦导入,就无法忽略其他的。