函数 main() 的用法?
Posted
技术标签:
【中文标题】函数 main() 的用法?【英文标题】:Usage of the function main()? 【发布时间】:2017-06-13 05:31:11 【问题描述】:我很好奇这两种实现之间是否有任何区别:
def main():
somecode()
if __name__ == '__main__':
main()
或者:
if __name__ == '__main__':
somecode()
除了你可以从模块中导入函数main()
【问题讨论】:
main
没有什么特别之处,只是一个提高理解力的函数......这意味着它是程序的“主要”部分,一切都发生在这里。将其他函数调用包装到一个函数中使其更加干净 IMO。它也是一个包含您的论点逻辑和其他内容的地方。
你让 C/C++ 开发者对前者更满意 :)
【参考方案1】:
我能想到的唯一实际区别是适用于我今天早些时候给出的答案here。
在其自己的函数main()
中而不是直接在if __name__ == '__main__'
块中定义主逻辑,可以更轻松地处理程序应该过早结束的情况:
def main():
...
if not continue_program:
return
...
if not continue_program:
return
...
if __name__ == '__main__':
main()
要直接从 if
块中获得相同的行为,我需要嵌套几个条件主体(或者使用像 sys.exit()
这样丑陋的东西)。
【讨论】:
为什么不在 'if name__== '__main '' 之后放置这些 if 语句: @freude 如果我这样做了,我的代码主体将不会在函数中执行,这意味着我将无法使用return
,因此需要我使用丑陋的嵌套正如我在答案中所说的条件块。
@freude 此外,在函数中运行的代码比在全局上下文中运行的代码更高效,因为本地名称查找比全局名称查找更快。【参考方案2】:
如果你的代码与给出的完全一样,那么直接调用somecode()
对我来说看起来更干净:
if __name__ == '__main__':
somecode()
这是因为在 Python 中,main
只是另一个函数,而不是像 C/Java 中那样的特殊函数。
但是,如果你的主函数调用了多个函数,那么
def main():
somecode1()
somecode2()
somecode3()
if __name__ == '__main__':
main()
比下面的替代方案更干净,原因是现在,不同函数的交互使代码模块化,包装函数现在可以导入其他地方。
if __name__ == '__main__':
somecode1()
somecode2()
somecode3()
注意,
def main():
somecode1()
somecode2()
somecode3()
if __name__ == '__main__':
main()
等价于,而main在这里只是函数的另一个名称
def somecode():
somecode1()
somecode2()
somecode3()
if __name__ == '__main__':
somecode()
【讨论】:
以上是关于函数 main() 的用法?的主要内容,如果未能解决你的问题,请参考以下文章