Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么名为'main'的函数不';没有什么特别的意义吗?_Python_Main - Fatal编程技术网

Python 为什么名为'main'的函数不';没有什么特别的意义吗?

Python 为什么名为'main'的函数不';没有什么特别的意义吗?,python,main,Python,Main,在Python中,为什么名为main的函数不像在C和Java中那样具有特殊意义 如果程序员从C或Java切换到Python呢。他应该继续吗 在Python中使用main,就像在C或Java中一样,这是他现在的风格 编程或者从广义上讲,它在某种程度上是有害的 用Python编程 编辑:我已经阅读了这篇文章,其中有一个非常好的例子提到为什么第一次程序员应该使用python来避免main。这样的程序员应该这样做: if __name__ == "__main__": # run stuff

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

如果程序员从C或Java切换到Python呢。他应该继续吗 在Python中使用
main
,就像在C或Java中一样,这是他现在的风格 编程或者从广义上讲,它在某种程度上是有害的 用Python编程


编辑:我已经阅读了这篇文章,其中有一个非常好的例子提到为什么第一次程序员应该使用python来避免main。

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

if __name__ == "__main__":
    # run stuff

如果未导入模块,则变量
\uuuuu name\uuuuuu
设置为
“\uuuuuu main\uuuuuu”

在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

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

if __name__ == '__main__':
  # Your main function
if
块中的代码仅在Python文件未作为模块导入时运行

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

def main():
  # ...

if __name__ == '__main__':
  main()

我觉得它不太好看。

你也应该问,为什么在C和Java中,
main
有特殊的意义。这只是语言设计师的选择
main
很可能被称为
start
begin
,但有人选择了
main
,它卡住了

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

__name__ == "__main__"
这通常被包装为
if
的一部分,并且可以在调用
main
函数时使用一行代码来实际启动程序

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

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

在许多方面不需要
main
,这使得该语言更加灵活,特别是对于更简单的任务

附录:

为编辑添加一些上下文。那篇文章的论点很差。实际上,函数名冲突并不少见,因为有许多模块做相同或类似的事情(在内核中不是很多,但一旦开始使用pip,就会遇到奇怪的冲突)。因此,使用描述性函数名并避免从foo import*执行
,是有益的

与C++程序员普遍认为使用<代码>使用命名空间STD 污染名称空间是不好的形式,Python程序员通常认为它是坏的形式,用<代码>导入*<代码>污染您的命名空间,尤其是因为它可以在到处使用时产生滚雪球效应。 最后,您不太可能在程序

main
中调用2个函数。你很可能在其他地方发生名字冲突。真正的危险是通配符导入,而不是
main
函数

在Python中,为什么称为main的函数不像在C和Java中那样具有特殊意义

因为python在设计时没有考虑到C、java或类似的语言,所以有些语言实际上不使用main,有相当多的
hello world
程序,因为您可以看到,并不是所有的程序都使用main,尽管您可能无法真正比较它们

无论是哪种方式,正如其他人所说,您都可以通过检查
if\uuuuu name\uuuu=='\uuuu main\uuu':
oh来检查模块是否直接从解释器运行。以下是python创建者Guido Van Russon关于如何编写主函数的一些提示

如果程序员从C或Java切换到Python呢。他是否应该继续在Python中使用main,就像在C或Java中一样,因为这是他现在的编程风格,或者从广义上说,它对Python编程有害

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


这有很多好的参考资料

有一个很好的解释,解释了为什么使用main()调用单个过程(或方法)是一个好主意,作者是YouTube上的Kent D Lee-基本上,这是因为没有main(),所有变量都是全局变量,而且它们不仅需要更长的访问时间,它们还存在一个过程的变量会干扰另一个过程的变量的风险。还可以使用main()调用您的过程,通过导入这些过程,您可以在另一个程序中重用这些过程。此外,您可以在不执行整个程序的情况下测试单个过程。当然,如果您要做的只是输出“hello world”,那么拥有一个main方法是毫无好处的,您这样做的唯一原因是了解它是如何工作的。
每个人都说Python对学习者有好处的原因是因为你可以很容易地开始做事情——问题是t