我在阅读答案时仍然感到奇怪,所以我尝试了下面的代码示例。
首先,尝试建立如下文件结构:
tmpdir
|A
|__init__.py
| B.py
| C.py
现在是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']
所以,当我们只是想导入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
使用fromlist里,而不是package
,因为module
已编制fromlist里PARAM没有帮助的。一旦它被导入,就没有办法忽略其他的。
说“这只是实施的工作原理”并不能回答我的问题。它为什么这样工作? 说“模仿从名称导入...”形式更接近,但在什么情况下你会需要吗? fromlist不会影响__import__的实际工作方式,所以我没有看到有什么情况需要通过它来模拟任何事情,除了该函数明显的行为。 – ieure 2010-04-27 19:33:21
你是对的,这是乞讨的问题。我更新了我的答案以提供更相关的答复。 – mipadi 2010-04-27 20:31:43