什么决定哪个python类' main()运行

时间:2014-06-23 23:52:44

标签: python

我正在尝试制作一个在专用监视器上显示参数化数据的工具。

按照我在java中学到的,我将包含“调用”代码main()的方法命名为。然后我在文件末尾调用此main()。问题是,由于某种原因,当我在命令提示符下运行python file1时,它从file2运行main。 File1导入文件2,但由于没有编写main()而避免了from file2 import*上的命名空间冲突,我不确定它是否正在运行另一个文件的main()

我正在运行Windows 7 Ultimate,python 3.4

2 个答案:

答案 0 :(得分:2)

使用__name__变量来指定您要运行的main()

例如,请查看:What does if __name__ == "__main__": do?

答案 1 :(得分:1)

main只是一个指向函数对象的Python变量。如果为main指定了不同的值,则会松开对原始函数的引用。如果您在导入后定义main,则会使用您自己的main

更新:如果file1.pyfile2.py都包含main()函数的定义,并且两者都在文件中调用它 - 比如说是最后一个在自己的文件中排队,如果file1.py执行import file2 - 但from file2 import *中的main()定义之后没有file1.py,那么{ {1}}函数将被调用。在main()(仅限应用程序中的第一次导入)期间调用file2.main()import file2调用file1.main()时将调用main()找到了。

每当file1.py作为脚本启动时,它将按源文本的顺序处理。定义的处理意味着定义的编译,当在第一次读取期间找到命令时,它被执行(实际上在首先编译到xxx.py之后)。

避免在文件中执行代码的唯一方法是使用具有适当条件的xxx.pyc跳过代码片段。这就是模式

的原因
if

用于来源。 (实际上是代码的执行 - 只跳过if __name__ == '__main__': main() 的分支。)读取它...如果文件作为脚本启动,那么if变量将获取字符串值__name__,条件成立,并调用此文件中的'__main__'

如果在main()中使用相同的模式,并且该文件用作模块(即file2.py),则import file2变量包含导入模块的名称(这里__name__),条件不成立。因此,file2内的main()未被调用。

即使在预期仅用作模块的文件中,也经常使用该模式。该代码通常用于测试模块的基本功能。想想模块的作者做出一些改变时的情况。然后他/她将其作为脚本启动(通常不是doney),并且正文开始测试模块并报告结果 - 比如使用file2.py模块或任何类型的测试。因此,unittest将是激活单元测试的好地方,例如。

尝试将以下内容添加到file2.main()

的末尾
file1.py