我正在尝试制作一个在专用监视器上显示参数化数据的工具。
按照我在java中学到的,我将包含“调用”代码main()
的方法命名为。然后我在文件末尾调用此main()
。问题是,由于某种原因,当我在命令提示符下运行python file1
时,它从file2运行main。 File1导入文件2,但由于没有编写main()
而避免了from file2 import*
上的命名空间冲突,我不确定它是否正在运行另一个文件的main()
。
我正在运行Windows 7 Ultimate,python 3.4
答案 0 :(得分:2)
使用__name__
变量来指定您要运行的main()
。
答案 1 :(得分:1)
main
只是一个指向函数对象的Python变量。如果为main
指定了不同的值,则会松开对原始函数的引用。如果您在导入后定义main
,则会使用您自己的main
。
更新:如果file1.py
和file2.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