为什么使用if __name__ ==“ __main__”:main()模式而不是将主代码放入if语句中?

时间:2018-10-25 13:46:58

标签: python

尽管我已经使用python一段时间了,但是您看到的常见模式是以下两个语句:

def main():
    # Fancy code here 
if __name__ == "__main__":
    main()

我的问题是,为什么您不使用这种模式呢?

if __name__ == "__main__":
    # Fancy code here

这是万一您想从另一个地方导入main的情况?还是有其他原因您可能想要这样做?

2 个答案:

答案 0 :(得分:1)

一个函数可可重用,您可以从其他代码中调用它。在if __name__保护下的代码无法这样调用。

它使测试和封装更加容易。您只需要

import module

module.main()

答案 1 :(得分:1)

另一个原因是避免用变量填充全局范围。

考虑以下示例:

def add_em(arg1, arg2):
    return a + b

if __name__ == "__main__":
    a = 2
    b = 4
    print(add_em(a, b))

在这里,add_em()函数显然存在一个错误:它应该返回arg1 + arg2,但是由于a和b变量属于全局范围,因此直到add_em()被发现之前,该错误很可能未被发现。从另一个上下文调用。运行脚本不会出现错误:

$ python myscript.py
6

使用main()函数可能会更早地检测到这一点:

def add_em(arg1, arg2):
    return a + b

def main():
    a = 2
    b = 4
    print(add_em(a, b))

if __name__ == "__main__":
    main()

现在可以立即检测到错误:

$ python myscript.py
Traceback (most recent call last):
    ...
NameError: name 'a' is not defined