NIl*_*rma 2 python program-entry-point
在Python中为什么调用的函数main没有像在C和Java中那样具有任何特殊意义?
如果程序员从C或Java切换到Python怎么办?他是否应继续使用mainPython,就像在C或Java中一样,因为现在他的风格是编程,或者从广义上讲,它在Python中进行编程有点不利?
编辑:我已经阅读了这篇文章,其中提到了一个非常好的例子,为什么第一次程序员应该在python 主要的python中克制main 有害.
小智 9
这样的程序员应该这样做:
if __name__ == "__main__":
# run stuff
Run Code Online (Sandbox Code Playgroud)
如果未导入模块__name__,"__main__"则将变量设置为.
您还应该问,为什么在C和Java中确实main具有特殊意义.这只是语言设计师的一个选择. main很可能已被召唤start或者begin有人选择main并且它被卡住了.
在Python中,没有理由不能调用函数main并将其作为程序的起点.但是,Python有自己的语法来识别某个文件是否相当于main:
__name__ == "__main__"
Run Code Online (Sandbox Code Playgroud)
这通常包含在一个部分中,if并且在调用main实际启动程序的函数时可能只需要一行.
Python和许多(所有?)脚本语言的部分设计是代码可以简单地内联编写.您不必将所有内容都包装在函数中.因此,许多简单的脚本根本不需要任何功能.例如,旋转日志文件的cron作业可以写为python文件中的代码块,而不定义任何函数.
在那种情况下,该main方法不是必需的.
main在许多方面不需要使语言更灵活,特别是对于更简单的任务.
附录:
为编辑添加一些上下文.该文提出了一个非常糟糕的论点.实际上,函数名称冲突并不罕见,因为有许多模块执行相同或相似的事情(核心不是很多,但是一旦你开始使用pip,你就会遇到奇怪的碰撞).因此,使用描述性函数名称并避免做任何事情都是有益的from foo import *.
与C++程序员通常认为污染您的命名空间一样糟糕的形式一样using namespace std,Python程序员通常认为污染您的命名空间import *是不好的形式,特别是因为如果在任何地方使用它会导致滚雪球效应.
最后,您不太可能在程序中调用2个函数main.你更有可能在其他地方发生名称冲突.真正的危险是通配符导入,而不是main函数.
在Python中,有一些东西的行为类似main()的功能:
if __name__ == '__main__':
# Your main function
Run Code Online (Sandbox Code Playgroud)
if仅当Python文件尚未作为模块导入时,才会运行此块中的代码.
如果您决定使用那个丑陋的main()函数,那么Python的等价物将是这样的:
def main():
# ...
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我觉得它不是很漂亮.