问题
查看别人的代码经常会出现 if __name__ == '__main__',这是什么意思呢,有什么作用?
由于每个python模块(python文件)都包含内置的变量name,当运行模块被执行的时候,name等于文件名(包含了后缀.py)。如果import到其他模块中,则name等于模块名称(不包含后缀.py)。而“main”等于当前执行文件的名称(包含了后缀.py)。所以当模块被直接执行时,name == 'main'结果为真;而当模块被import到其他模块中时,name == 'main'结果为假,就是不调用对应的方法。
测试
我们可以写两个简单的程序来观察这句话的作用:
# a.py import b
和
# b.py print "Hello World from %s!" % __name__ if __name__ == '__main__': print "Hello World again from %s!" % __name__
运行它们得到输出:
$ python a.py Hello World from b!
你可以发现,当一个程序作为模块被导入时,Python将这个模块里的 global()['__name__'] 设置为模块名,此外,导入后模块中的所有代码都将执行,但此时if语句的条件为False,所以不会执行。
$ python b.py Hello World from __main__! Hello World again from __main__!
你可以发现,当程序作为文件被执行时,Python将这个文件里的 global()['__name__'] 设置为 “__main__”,此时if条件成立,里面的语句被执行。
参考链接:
1、https://www.shiyanlou.com/questions/102607
2、https://stackoverflow.com/questions/419163/what-does-if-name-main-do