I don't understand Python's main block. What is that thing?
Possible Duplicate:
What doesdo?
所以我启动了pyscripter,得到了一个文件,其中包含:
1 2 3 4 5 | def main(): pass if __name__ == '__main__': main() |
那是什么?为什么没有它我的程序也能工作?这样做的目的是什么?我的代码会去哪里?让我们说一个打印hello world的函数。那会去哪里?我在哪里打电话?
其目的基本上是,您可以定义一个中心入口点,如果并且仅当脚本直接运行时。因为只有靠自己运行,
这在libary模块中也经常被用来在您快速需要某些东西时具有一些默认行为。例如,
在命令行上运行
回应您的评论:
对于作为库、包含类型或函数的普通模块,您的应用程序需要的是,您不需要
1 2 3 4 5 6 7 8 9 10 11 | def main (): # doing something utilityFunction(...) otherUtilityFunction(...) def utilityFunction (...): ... def otherUtilityFunction (...): ... main() |
如果不将代码放入单独的函数中,则必须在底部(在函数定义之后)执行所有处理,如果只想在直接调用脚本时快速查看所做的操作,则可能会适得其反。
现在,正如我所说的,您不需要将其放入主条件块;您可以直接调用它。但是,如果出于任何原因需要包含该文件,例如,因为您想将其封装到其他东西中,或者如果您想从交互shell(idle或其他东西)中反复调用该文件,那么您可能不想在只导入模块时运行
总的来说,把
执行python文件时,
该构造只允许在执行文件时执行一些代码。例如,如果您有文件
1 2 3 4 5 6 | def main(): print('Hello, World!') if __name__ == '__main__': main() |
您将获得以下结果:
1 2 3 4 5 6 7 8 9 | $ python mymain.py Hello, World! $ python Python 2.7.3 (default, Aug 1 2012, 05:14:39) [GCC 4.6.3] on linux2 Type"help","copyright","credits" or"license" for more information. >>> import mymain # main() *not* executed >>> mymain.main() Hello, World! |
在没有执行代码的情况下导入文件通常很有用。这样,第三方软件就可以调用主函数,而无需创建新的进程,并允许它们在运行前更改某些内容。
所以,这是不必要的,但它是一个很好的实践使用。通常,您会意识到程序的某些函数/类可能对其他程序有用,因此能够在不执行主程序的情况下导入文件是很好的做法。
与具有EDCOX1,3的块的Java相比,它具有一个只有EDCOX1×4的方法的类,并且使用其他类来完成他的工作,而不使用它就像在一个类中也有一个EDCOX1×4的方法,它也提供了其他的功能(例如某种容器或任何一个执行EMA OCX1 4)的方法来执行MA。在程序中)。
python中的所有内容都是语句,没有声明(例如,
当然,这是不可重用的。当"程序"对于其他模块也应该是可导入的时,您将它放入一个函数中(还有一些其他的小优点)。但是,执行该文件(
输入
这个想法非常简单:您可以将该文件用作包(要导入到某个地方的东西)或纯脚本。如果该文件用作脚本,则python的解释器变量"
因此,我们在这里测试是否将
您必须理解Java和Python之间的主要区别:在Python中,当解释器读取文件时,它被执行——>声明和代码都被解释,Python的许多特性都是基于此的。
你实际上不需要这个技巧来"你好世界",但它在你写模块的时候很有用。只有直接执行脚本时,