为什么所有模块一起运行?
我刚刚制作了 eclipse 的新副本并安装了 pydev。
在我第一次尝试在 eclipse 中使用 pydev 时,我在 src 包下创建了 2 个模块(默认的)
FirstModule.py:
'''
Created on 18.06.2009
@author: Lars Vogel
'''
def add(a,b):
return a+b
def addFixedValue(a):
y = 5
return y +a
print "123"
run.py:
'''
Created on Jun 20, 2011
@author: Raymond.Yeung
'''
from FirstModule import add
print add(1,2)
print "Helloword"
当我拉出运行按钮的下拉菜单,然后单击“ProjectName run.py”时,我在 src 包下创建了 2 个模块。 py”,这是结果:
123
3
Helloword
显然两个模块都运行了,为什么?这是默认设置吗?
I just made a fresh copy of eclipse and installed pydev.
In my first trial to use pydev with eclipse, I created 2 module under the src package(the default one)
FirstModule.py:
'''
Created on 18.06.2009
@author: Lars Vogel
'''
def add(a,b):
return a+b
def addFixedValue(a):
y = 5
return y +a
print "123"
run.py:
'''
Created on Jun 20, 2011
@author: Raymond.Yeung
'''
from FirstModule import add
print add(1,2)
print "Helloword"
When I pull out the pull down menu of the run button, and click "ProjectName run.py", here is the result:
123
3
Helloword
Apparantly both module ran, why? Is this the default setting?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您导入模块时,其中的所有内容都会“运行”。这意味着创建类和函数对象、设置全局变量并执行打印语句。 *)
通常的做法是将仅在模块直接运行时执行的语句包含在 if 块中,如下所示:
现在,如果您将模块作为脚本运行,
__name__
设置为"__main__"
,因此将打印"123"
。但是,如果您从其他地方导入模块__name__
在您的情况下将是"FirstModule"
,而不是"__main__"
,所以无论是该块将不会被执行。*) 请注意,如果再次导入相同的模块,它就不会再次“运行”。 Python 会跟踪导入的模块,并在第二次重新使用已经导入的模块。这使得 C/C++ 技巧得以实现,例如使用 IFNDEF 语句将头文件体括起来,以确保头文件仅在 Python 中不需要时才导入。
When you import a module, everything in it is "run". This means that classes and function objects are created, global variables are set, and print statements are executed. *)
It is common practice to enclose statements only meant to be executed when the module is run directly in an if-block such as this:
Now if you run the module as a script,
__name__
is set to"__main__"
, so"123"
will be printed. However, if you import the module from somewhere else__name__
will be"FirstModule"
in your case, not"__main__"
, so whatever is in the block will not be executed.*) Note that if you import the same module again, it is not "run" again. Python keeps track of imported modules and just re-uses the already imported module the second time. This makes C/C++ tricks like enclosing header file bodies with
IFNDEF
statements to make sure the header is only imported once unnecessary in python.