最近在使用以下这段代码的时候产生了一些疑问:
我的文件名称不叫main,但为什么我运行这个主函数的时候也可以运行呢?
python
if __name__ == "__main__":
train()
于是写篇文章记录一下,详细见下表
✅ __name__
的行为规律:
执行方式 | __name__ 的值 |
会不会执行 if __name__ == "__main__" |
---|---|---|
python some_file.py |
"__main__" |
✅ 会执行 |
import some_file |
"some_file" (模块名) |
❌ 不会执行 |
总结:
只有在直接运行某一个文件的时候,这个文件的name值才会被设置为main,无论这个文件叫什么名字。除此之外,如果是导入文件的情况下,都是以这个文件的名称作为name值。
于是,当涉及到模型训练或参数更新时,为了防止调用文件时,训练函数也被运行,我们一般选择使用以上开头的主函数命名方式,这样,当有import 文件名时,main函数里面的内容便不会自动运行,保证了代码的模块化和可复用性,不会意外触发训练或其他副作用。