函数 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() 的用法?的主要内容,如果未能解决你的问题,请参考以下文章

为什么需要main函数,及其参数的用法

C++ main函数中参数argc和argv含义及用法

python中入口函数的用法

C++ 纯虚函数接口,标准 C 导出 DLL 函数的用法

函数main啥意思?

C语言:getchar函数的用法