2

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

如果程序员从 C 或 Java 切换到 Python 会怎样。他是否应该main像在 C 或 Java 中一样继续在 Python 中使用,因为这是他现在进行编程的风格,还是从广义上讲,这对在 Python 中进行编程是有害的?

编辑:我已经阅读了这篇文章,其中一个很好的例子提到了为什么第一次程序员应该在 python 中避免 main 中的main in python有害

4

6 回答 6

9

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

if __name__ == "__main__":
    # run stuff

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

于 2012-08-13T06:37:40.440 回答
9

您还应该问,为什么在 C 和 Java 中确实main具有特殊意义。这只是语言设计者的选择。 main很可能会被调用start,或者begin但是有人选择了main它并且卡住了。

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

__name__ == "__main__"

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

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

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

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

附录:

为您的编辑添加一些上下文。那篇文章提出了一个非常糟糕的论点。实际上,函数名称冲突并不少见,因为有许多模块执行相同或相似的事情(在核心中没有那么多,但一旦您开始使用 pip,您就会遇到奇怪的冲突)。因此,使用描述性函数名称并避免使用from foo import *.

就像 C++ 程序员通常认为用 污染命名空间是不好的形式一样using namespace std,Python 程序员通常认为用 污染命名空间是不好的形式import *,特别是因为如果在任何地方使用它会导致滚雪球效应。

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

于 2012-08-13T06:42:54.227 回答
6

在 Python 中,有一些类似于main()函数的东西:

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

if块中的代码仅在 Python 文件未作为模块导入时运行。

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

def main():
  # ...

if __name__ == '__main__':
  main()

我觉得不是很漂亮。

于 2012-08-13T06:38:34.387 回答
4

在 python 中,一个.py文件既可以作为模块使用,也可以直接运行,somain用于标识如果文件是直接运行还是文件作为模块导入时要运行的部分。

文件.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
于 2012-08-13T06:38:25.993 回答
0

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

因为python在设计时没有考虑到C、java或类似语言,所以有些语言实际上不使用main,http://c2.com/cgi/wiki ?HelloWorldInManyProgrammingLanguages有相当多的hello world程序你可以看到并非所有都使用 main,尽管您可能无法真正比​​较它们...

if __name__ == '__main__':正如其他人所说的那样,无论哪种方式,您都可以通过检查oh来检查模块是否直接从解释器运行,这里是 Python 的创建者 Guido Van Russon 关于如何编写主要函数的一些提示。

如果程序员从 C 或 Java 切换到 Python 会怎样。他是否应该像在 C 或 Java 中一样继续在 Python 中使用 main,因为这是他现在进行编程的风格,还是从广义上讲,这对在 Python 中进行编程是有害的?

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

这很少有很好的参考Python 编码标准/最佳实践

于 2012-08-13T07:23:56.143 回答
0

有一个很好的解释为什么使用 main() 来调用单个过程(或方法)是一个好主意,由 YouTube 上的 Kent D Lee 撰写 - 基本上是因为没有 main() 你所有的变量都是全局的,而且它们不仅需要更长的时间为了访问,他们还冒着一个程序的变量会干扰另一个程序的变量的风险。此外,使用 main() 调用您的过程使您可以通过导入它们在另一个程序中重用这些过程。此外,您可以在不执行整个程序的情况下测试单个程序。当然,如果你要做的只是输出“hello world”,那么拥有一个 main 方法根本没有任何优势,你这样做的唯一原因是找出它是如何工作的。
每个人都说 Python 对学习者有好处的原因是因为你可以很容易地立即开始做事——问题是,如果你要编写相当大的程序,你很快就会面临这样一个事实,即其他语言所具有的所有这些复杂性,实际上是相当重要的。

于 2012-08-19T20:23:33.273 回答