当我阅读答案时,我仍然感到很奇怪,因此我尝试了以下代码示例。
首先,尝试构建以下文件结构:
tmpdir
|A
|__init__.py
| B.py
| C.py
现在A是一个package
,而B
orC
是一个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']
因此,当我们只想导入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']
结果显示,当我们尝试在frommodule
而不是a上使用fromlist时package
,fromlist参数根本没有帮助,因为module
已经编译过了。导入后,将无法忽略其他对象。