在Eclipse PyDev中Python脚本执行两次
我在Eclipse的PyDev里有一个叫做automated_vertica的项目,结构如下:
automated_vertica
src
root
__init__.py
RequestHandler.py
RequestHandler.py是一个模块,里面有很多方法,其他的什么都没有。
__init__.py
里面只有两行代码:
from root import RequestHandler
print('test')
当我在PyDev里运行__init__.py
时,Eclipse的控制台显示test
两次。如果我把from root
去掉,它就能正常工作。
你能帮我解释一下我漏掉了什么,以及这里发生了什么吗?
编辑:RequestHandler.py的内容是:
'''
Created on Apr 23, 2014
@author: myname
'''
def FileToString(fileName):
f = open(fileName, 'r')
result = f.read()
f.close()
return result
def Flatten(listOfLists):
return [value for sublist in listOfLists for value in sublist]
1 个回答
3
因为 root
里有一个 __init__
文件,所以它被称为一个模块。
当你运行 from module import..
的时候,它会执行这个模块里 __init__
文件中的所有代码。
而你的 __init__
文件里有一个 print
,所以这个打印语句会被执行。
由于你直接运行 __init__
(其实这样做是不太好的),它会执行以下内容:
-> from root import RequestHandler
-> root.__init__:
-> import RequestHandler
-> print("Test")
-> print("Test")
__init__
文件可以用来检查某些模块是否存在,或者作为备用方案,或者检查 Python 的版本。
比如,这个 __init__.py
文件会阻止任何版本低于 400 的 Python 导入这个模块:
import sys
if not hasattr(sys, "version_info") or sys.version_info < (400, 0):
raise RuntimeError("root requires Python 400.0 or later.")
del sys
from root import RequestHandler
print("Test")
希望它能一直更新到永远。