尽管我已经使用python一段时间了,但是您看到的常见模式是以下两个语句:
def main():
# Fancy code here
if __name__ == "__main__":
main()
我的问题是,为什么您不使用这种模式呢?
if __name__ == "__main__":
# Fancy code here
这是万一您想从另一个地方导入main的情况?还是有其他原因您可能想要这样做?
答案 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