在Python中,为什么一个名为main
的函数不像在C和Java中那样具有任何特殊意义?
如果程序员从C或Java切换到Python怎么办?他应该留下来吗在 Python 中使用 main
也像在 C 或 Java 中使用一样,因为这是他现在的风格编程或从广义上讲,它在某种程度上对做是有害的用Python编程?
编辑:我已经浏览了这篇文章,其中提到了一个非常好的例子,为什么第一次程序员应该避免在python中main在python中有害。
你还应该问,为什么在C和Java中main
具有特殊的意义。这只是语言设计师的一个选择。 main
本可以被称为start
或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 *
污染你的命名空间是不好的形式,特别是因为它如果在任何地方使用都会引起滚雪球效应。
最后,您不太可能在程序中调用 2 个函数main
。您更有可能在其他地方发生名称冲突。真正的危险是通配符导入,而不是main
函数。
这样的程序员应该这样做:
if __name__ == "__main__":
# run stuff
如果未导入模块,则变量 __name__
设置为 "__main__"
。
在 Python 中,有一些东西可以main()
函数
if __name__ == '__main__':
# Your main function
仅当 Python 文件尚未作为模块导入时,此 if
块中的代码才会运行。
如果你决定使用那个丑陋的main()
函数,Python 等价物将是这样的:
def main():
# ...
if __name__ == '__main__':
main()
我觉得它不是很漂亮。
在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的函数不像在C和Java中那样具有任何特殊意义?
因为 python 在设计时没有考虑到 C、java 或此类语言,所以有些语言实际上不使用 main,http://c2.com/cgi/wiki?HelloWorldInManyProgrammingLanguages 有相当多的hello world
程序,因为您可以看到并非所有程序都使用 main,尽管您可能无法真正比较它们......
无论哪种方式,正如其他人所说的那样,你都可以通过检查if __name__ == '__main__':
来检查模块是否直接从解释器运行,这里有一些来自python创建者Guido Van Russon关于如何编写主要函数的提示。
当你编写Python代码时,或者当你编写如果程序员从C或Java切换到Python怎么办?他是否应该继续在 Python 中使用 main,就像在 C 或 Java 中一样,因为这是他现在进行编程的风格,或者从广义上讲,它对用 Python 编程是有害的?
任何程序时,总是试图让代码在该语言中看起来很自然,这意味着遵循语言开发人员或整个社区设定的标准和实践,请不要像Python那样编写C或Java代码,这是可能的,但它皱眉, 代码往往容易出错,很难理解,有时甚至很慢,这同样适用于任何其他语言。
这很少有很好的参考 Python 编码标准/最佳实践
调用单个过程(或方法)是一个好主意,由 Kent D Lee 在 YouTube 上 - 基本上这是因为没有 main() 所有变量都是全局的,它们不仅需要更长的时间来访问,而且还冒着一个过程的变量会干扰另一个过程的变量的风险。此外,使用 main() 调用您的过程使您能够通过导入这些过程在另一个程序中重用它们。此外,您可以在不执行整个程序的情况下测试单个过程。当然,如果您要做的只是输出"hello world",那么拥有一个主要方法根本没有优势,而您这样做的唯一原因是找出它是如何工作的。
每个人都说Python对学习者有好处的原因是因为你可以很容易地立即开始做事 - 问题是,如果你要编写相当大的程序,你很快就会面临这样一个事实,即其他语言具有的所有这些复杂性实际上非常重要。