💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
当你运行一个 Python 文件,Python 解释器首先会读取该文件,并在运行时赋值给一些特殊的内置变量。`__name__` 就是这样的特殊变量之一。 当一个 Python 脚本被直接运行时,例如 `python my_script.py`,那么此时文件 `my_script.py` 是主执行文件,Python 解释器将特殊变量 `__name__` 设置为 `"__main__"`。 但如果 `my_script.py` 是被其它 Python 脚本作为模块导入的,比如 `import my_script`,那么 `__name__` 的值就会设为这个模块的名字,即 `"my_script"`。 因此,`if __name__ == "__main__":` 这个判断语句的作用就是检测这段脚本是被直接运行还是被导入的。如果是被直接运行的,那么下面缩进的代码块就会被执行。这个特性常常被用来将那些只希望在脚本被直接执行时才运行的代码放置在该判断语句下,比如应用的主入口函数,或者是一些测试代码。 例如,在 Flask 应用中,一般这样使用: ```python from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello, World!" # 下面这一行会确保只有在这个脚本被 Python 直接运行时,才会启动 Flask 开发服务器 if __name__ == "__main__": app.run(debug=True) ``` 在这段代码中,`app.run(debug=True)` 启动了 Flask 的开发服务器,这通常只在开发时需要,所以我们把这段代码放在 `if __name__ == "__main__":` 判断语句下。如果这个程序被其它脚本导入,那么 `app.run(debug=True)` 就不会被执行。 ## 一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。 说明:__name__ 与 __main__ 底下是双下划线, _ _ 是这样去掉中间的那个空格。