这样做的目的基本上是,可以且仅当脚本直接自己运行时,才可以定义中央入口点。因为
__name__将永远只能是等于
'__main__',如果是独立运行。将脚本的实际内容放在单独的函数中,其他脚本可以导入该函数并在需要时运行它,因此导入脚本后,该函数不会立即运行。
当您只需要快速使用某些东西时,它通常也用于库模块中以具有一些默认行为。例如,该
http.server模块提供了广泛的功能,可以使用您能想到的任何功能来创建自己的HTTP服务器。如果只想让一个简单的服务器静态地静态侦听和传递文件,则可以在从命令行运行时使用模块的默认行为。
python3 -m http.server在命令行上运行将完全做到这一点;运行该
http.server模块,该模块本身将在其
__name__== '__main__块中启动一个简单的HTTP服务器。
针对您的评论:
对于充当库,包含类型或函数的普通模块,您的应用程序需要,而无需
main功能或主块。对于直接调用的脚本,例如实际启动应用程序的启动脚本,您将拥有某种未封装在函数或类中但可以直接运行的代码。那将是一件事情,您可以放入一个主函数,然后分别调用它。这使您可以更自由地放置代码。例如,您可以
main直接在文件的开头使用该函数,而在其中开始的其他函数将在文件中进一步定义。然后脚本的最后一部分是
main()。您不一定需要将其放入
if__main__ == '__main__':条件,您可以直接调用它。因此,例如,您的脚本可能如下所示:
def main (): # doing something utilityFunction(...) otherUtilityFunction(...)def utilityFunction (...): ...def otherUtilityFunction (...): ...main()
如果不将代码放入单独的函数中,则必须在底部进行所有处理(在函数定义之后),并且如果您只是想快速查看在执行 *** 作时要做什么,可能会适得其反。脚本被直接调用。
现在,正如我所说,您无需将其放入主条件块;您可以直接调用它。但是,如果出于某种原因而需要包含该文件(例如,因为要将其封装到其他东西中),或者想要从交互式外壳(IDLE或其他东西)中反复调用它,则可能不需要希望
main()仅在导入模块时运行,而仅在实际执行模块功能时运行。那是您应该放入
main()条件的地方;这样,除非您直接执行模块,否则它将不会执行。
通常,始终将
main()呼叫置于这种状态并不是一个坏主意,因为它永远不会受到伤害,但是在以后的某个时刻通常会变得有用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)