为什么我们要在python中使用main()函数,而不是将代码直接放在;名称==main";条款

为什么我们要在python中使用main()函数,而不是将代码直接放在;名称==main";条款,python,python-3.x,Python,Python 3.x,据说在python模块中编写以下代码块是一种很好的做法: if __name__ == '__main__': # execute only if run as a script main() 当您想将此模块导入另一个程序时,这会阻止执行语句 然而,这里奇怪的是main()函数。我们还需要将代码放入实际的main方法中,如下所示: def main() # All code goes here print("Inside main") 我觉得这是一种迂回的方式。创建一

据说在python模块中编写以下代码块是一种很好的做法:

if __name__ == '__main__':
  # execute only if run as a script
  main()
当您想将此模块导入另一个程序时,这会阻止执行语句

然而,这里奇怪的是main()函数。我们还需要将代码放入实际的main方法中,如下所示:

def main()
    # All code goes here
    print("Inside main")
我觉得这是一种迂回的方式。创建一个单独的main()函数,然后在if子句中调用它,有什么好处吗?

相反,直接在if子句中编写代码有什么害处?

if __name__ == '__main__':
    # All code goes here
    print("Inside main")
然而,这里奇怪的是main()函数。我们还需要将代码放入实际的main方法中,如下所示:

def main()
    # All code goes here
    print("Inside main")
嗯,你不需要这样做。实际上,如果您只需要一个简单的脚本(不作为模块使用),那么您甚至不需要任何函数,您也可以将所有代码直接放在顶层。但这并不意味着代码是干净的、可维护的、可测试的

我觉得这是一种迂回的方式。创建一个单独的main()函数,然后在if子句中调用它有什么好处吗

使用函数(以及模块和类)来组织代码的好处非常简单:干净、可读、可测试、可维护的代码。问问你自己,如果你没有主功能,你将如何测试你的主功能

然而,这里奇怪的是main()函数。我们还需要将代码放入实际的main方法中,如下所示:

def main()
    # All code goes here
    print("Inside main")
嗯,你不需要这样做。实际上,如果您只需要一个简单的脚本(不作为模块使用),那么您甚至不需要任何函数,您也可以将所有代码直接放在顶层。但这并不意味着代码是干净的、可维护的、可测试的

我觉得这是一种迂回的方式。创建一个单独的main()函数,然后在if子句中调用它有什么好处吗



使用函数(以及模块和类)来组织代码的好处非常简单:干净、可读、可测试、可维护的代码。问问你自己,如果你没有主功能,你将如何测试你的主功能

您可以在其他地方导入、测试或重用main,但不能使用内联代码。@Barmar-问题与if语句无关,关于内容是否需要封装的问题。@Sayse理解为什么我们通常使用if语句应该解释为什么需要封装内容。@tripleee您介意重新打开这个问题吗?它不是问
如果uuu name uuu=='\uuuu main uuu'
守卫在做什么,而是问“为什么要把主代码放在主函数中”@tripleee我完全不同意。OP清楚地说明了他知道防护装置在做什么以及我们为什么要使用它——“当你想将这个模块导入另一个程序时,这会阻止执行语句。”——他问的是为什么要将主代码放在函数中,而不是直接放在防护装置下。我完全不明白这是一个dup。你可以在别处导入、测试或重用main,内联代码不能这样做。@Barmar-问题与if语句无关,关于内容是否需要封装的问题。@Sayse理解为什么我们通常使用if语句应该解释为什么需要封装内容。@tripleee您介意重新打开这个问题吗?它不是问
如果uuu name uuu=='\uuuu main uuu'
守卫在做什么,而是问“为什么要把主代码放在主函数中”@tripleee我完全不同意。OP清楚地说明了他知道防护装置在做什么以及我们为什么要使用它——“当你想将这个模块导入另一个程序时,这会阻止执行语句。”——他问的是为什么要将主代码放在函数中,而不是直接放在防护装置下。我完全不明白这是怎么一个dup。我觉得这并不能回答这个问题。这个答案本质上是说,我们正在添加一个main()函数,因为我们只是将所有内容都放入函数中。但是,如果我们有if条款下的代码。另外,如果所有main()代码都包含在if子句中呢?这仍然是有组织的,因为如果你看脚本,你会直接看到if子句,知道这就是要运行的。好吧,你主要问两件事:1/为什么我们“需要”将主代码放入函数,2/有什么好处。答案是1/您实际上不“需要”这样做,2/主要的好处是您可以将此“主”代码称为函数,这允许您a/单元测试您的主函数(您如何单元测试此代码?),b/也可能调用此主函数(从另一个模块/脚本/任何东西)。这就回答了“不这样做的危害是什么”:你不能对这部分代码进行单元测试,也不能从其他模块调用这部分代码。对不起,我有4个小时没有时间阅读你的评论,直到现在。我读了你的评论,他们很好地回答了我的问题。非常感谢您的回复!:)我只是浏览了一下关于这个问题的评论。谢谢你重新提出我的问题,并坚持认为它与另一个不同。我真的很感谢你的帮助!我觉得这并不能回答这个问题。这个答案本质上是说,我们正在添加一个main()函数,因为我们只是将所有内容都放入函数中。但是,如果我们有if条款下的代码。另外,如果所有main()代码都包含在if子句中呢?这仍然是有组织的IMHO,因为如果你看脚本,你会直接看if子句,知道这就是要运行的