为什么称为“main”的函数没有任何特殊意义?

时间:2012-08-13 06:33:46

标签: python main

在Python中为什么名为main的函数没有像在C和Java中那样具有任何特殊意义?

如果程序员从C或Java切换到Python怎么办?他应该保留 在Python中使用main也像在C或Java中一样,因为这是他现在的风格 编程或广义上它对某些事情有害 用Python编程?

编辑:我已经阅读了这篇文章,其中提到了一个非常好的例子,为什么第一次程序员应该在python main in python harmful中克制main。

6 个答案:

答案 0 :(得分:9)

这样的程序员应该这样做:

if __name__ == "__main__":
    # run stuff

如果未导入模块,变量__name__将设置为"__main__"

答案 1 :(得分:9)

您还应该问,为什么在C和Java中main具有特殊意义。这只是语言设计师的一个选择。 mainstart可能被称为begin,但有人选择了main并且卡住了。

在Python中,没有理由不能调用函数main并让它成为程序的起点。但是,Python有自己的语法来识别某个文件是否等同于main

__name__ == "__main__"

这通常包含在if的一部分中,并且可以在调用实际启动程序的main函数中只有一行。

Python和许多(所有?)脚本语言的部分设计是代码可以简单地内联编写。您不必将所有内容都包装在函数中。因此,许多简单的脚本根本不需要任何功能。例如,用于旋转日志文件的cron作业可以在python文件中写为代码块而不定义任何函数。

在这种情况下,不需要main方法。

在许多方面不需要main会使语言更加灵活,尤其是对于更简单的任务。

<强>附录:

为您的编辑添加一些上下文。该文提出了一个非常糟糕的论点。实际上,函数名称冲突并不罕见,因为有许多模块执行相同或类似的事情(核心不是很多,但是一旦你开始使用pip,你将遇到奇怪的碰撞)。因此,使用描述性函数名称并避免执行from foo import *是有益的。

与C ++程序员通常认为使用using namespace std污染命名空间的错误形式一样,Python程序员通常认为使用import *污染命名空间是不好的形式,特别是因为它可能导致如果到处使用雪球效果。

最后,您不可能在程序main中调用2个函数。你更有可能在其他地方发生名称冲突。真正的危险是通配符导入,而不是main函数。

答案 2 :(得分:6)

在Python中,行为就像main()函数一样:

if __name__ == '__main__':
  # Your main function

仅当Python文件尚未作为模块导入时,才会运行此if块中的代码。

如果您决定使用那个丑陋的main()函数,那么Python等价物将是这样的:

def main():
  # ...

if __name__ == '__main__':
  main()

我觉得它不太漂亮。

答案 3 :(得分:4)

在python中,.py文件既可以用作模块,也可以直接运行,因此main用于标识文件直接运行时要运行的部分,或者文件作为模块导入。

file.py:

def func(x,y):
    print x+y

if __name__=='__main__':
    func(5,2):

如果直接执行则打印7

导入时,主要部分不会运行:

>>> from so32 import *
>>> func(5,5)
10
>>> func(10,20)
30

答案 4 :(得分:0)

  

在Python中,为什么名为main的函数没有像在C和Java中那样具有任何特殊意义?

因为python不是用C,java或者这样的语言设计的,所以有些语言实际上不使用main,http://c2.com/cgi/wiki?HelloWorldInManyProgrammingLanguages有相当多的hello world程序。可以看到并非所有使用main,尽管你可能无法真正比​​较它们......

正如其他人所说,你可以通过检查if __name__ == '__main__':来检查一个模块是否直接从解释器运行哦和here是python的创建者Guido Van Russon的一些提示写主要功能。

  

如果程序员从C或Java切换到Python怎么办?他是否应该继续在Python中使用main,就像在C或Java中一样,因为现在他的样式是编程,或者从广义上来说,在Python中进行编程会有什么危害?

当你编写python代码时,或者当你编写任何程序时,总是尝试让代码看起来很自然,这意味着遵循语言开发人员或整个社区设置的标准和实践,请不要在python中编写c或java之类的代码是可能的,但是它的皱眉,代码往往容易出错,而且很难理解,有时很慢,同样适用于任何其他语言。

这很少有好的参考文献Python coding standards/best practices

答案 5 :(得分:0)

有一个很好的解释为什么使用main()来调用单个程序(或方法)是一个好主意,由Kent D Lee在YouTube中 - 基本上是因为没有main()所有变量都是全局变量而不仅仅是它们需要更长时间才能访问,它们还存在一个程序的变量会干扰另一个程序变量的风险。同样使用main()调用您的过程使您可以通过导入它们在另一个程序中重用这些过程。此外,您可以测试单个过程而无需执行整个程序。当然,如果你要做的就是输出“你好世界”,那么拥有一个主要方法就没有任何优势,你唯一能做的就是找出它是如何工作的。
每个人都说Python对学习者有好处的原因是因为你可以很容易地开始直接做事 - 麻烦的是,如果你要编写相当大的程序,你很快就会遇到其他语言所有的并发症,实际上非常重要。