2012-08-02 88 views
6

你可以经常看到这个(变化的):为什么main()函数没有在if'__main__'中定义?

def main(): 
    do_something() 
    do_sth_else() 

if __name__ == '__main__': 
    main() 

而且我现在知道为什么这个(方案B):

if __name__ == '__main__': 
    do_something() 
    do_sth_else() 

或者至少这个(变体C ):

if __name__ == '__main__': 
    def main(): 
     do_something() 
     do_sth_else() 

    main() 

当然函数调用内部main()可能不是函数调用,它们仅代表您可能想要在您的main()函数中执行的任何操作。

那么为什么人们更喜欢变异a而不是其他呢?这只是风格/感觉还是有一些真正的原因?如果可能的话,请链接资源。

回答

11

为什么只限制您的main()函数仅用于命令行使用?

通过在模块范围内定义main()函数,您现在可以包装脚本并更改其调用方式。也许你想在sys.argv中设置默认参数,也许你想在另一个脚本中重新使用代码。

4

这是因为有两种使用Python脚本的方式。一个从命令行导入,另一个从另一个脚本导入。当你从命令行运行它时,你想运行main()函数,当你导入它时,你可能不想运行main()函数直到你需要它(你只想导入main())。

相关问题