“ test”用于什么模块?

时间:2019-05-07 16:19:29

标签: python

我发现了一些奇怪的代码:

all_modules_ = [
    'BaseHTTPServer', 'imaplib'
]

for module in all_modules_:
    print(module)
    m = __import__('test')

然后我得到了

» python test.py
BaseHTTPServer
BaseHTTPServer
imaplib
imaplib

这是为什么?

ipython中的结果似乎很正常:

In [2]: all_modules_ = [
   ...:     'BaseHTTPServer', 'imaplib'
   ...: ]
   ...:
   ...: for module in all_modules_:
   ...:     print(module)
   ...:     m = __import__('test')
   ...:
   ...:
BaseHTTPServer
imaplib

1 个答案:

答案 0 :(得分:2)

运行test.py时,it runs the module as __main__。由于模块执行__import__(„test“),因此它将再次以test的身份运行模块。因此,您会再次看到每个输出。

由于Python不会以相同的名称重新导入模块,因此您获得的输出不会超过两次。

在ipython中运行时,您的模块不存在。标准库模块测试改为运行一次。由于它不产生任何输出,因此您只能看到自己的输出一次。