当你运行一个 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__ 底下是双下划线, _ _ 是这样去掉中间的那个空格。
- 前言
- 1.入门篇
- Python介绍
- 安装与使用
- Python开发利器之VS Code
- 模块安装
- 命令行
- 一次Python无法安装模块的问题探索与解决之旅
- 命令运行
- Conda
- 下载地址
- 2.基础篇
- 基础语法
- 输入与输出
- with as的用法
- 注释
- Python命令行参数
- 编码
- 变量类型
- 列表遍历
- 运算符
- 表达式语句
- 条件
- 循环
- 日期和时间
- 函数
- 高级语法
- @符号-装饰器
- 模块和包
- name
- init.py
- 错误和异常
- 面向对象
- 3.专题篇
- 常用功能
- Python 字符串连接
- python web
- Python CGI编程
- Python OAuth2
- 认证 Flask-HTTPAuth
- 常用命令
- 内置函数
- dir()
- print(f)
- 标准模块
- sys
- pickle-数据序列化
- os
- IO(输入输出)
- 键盘输入
- 文件读写
- 测试
- Python测试框架之pytest快速入门
- pytest-bdd快速示例和问题解决
- 基于pytest-bdd的项目目录结构和命名规范
- python BDD 的相关概念
- Behave介绍和快速示例
- Python BDD之Behave测试报告
- Python BDD 框架比较之 pytest-bdd vs behave
- pytest进阶
- Flask + pytest测试
- 参考网址
- pytest-bdd进阶
- hehave进阶
- 测试路径
- python + selunium
- HTML 根据多层CSS 查找元素
- 等待执行
- 使用text 查找 span
- pytest如何在控制台输出
- 4.问题篇
- pip pip3 及区别
- TypeError: can only concatenate str (not "NoneType") to str
- 5.实战篇
- matplotlib-绘图包
- 导入类
- 命名规范
- 模块查找
- 6.进阶篇
- Flask
- Flask介绍
- Flask扩展模块
- Flask-Login
- 问题
- Jinja2
- Flask-RESTful
- Flask-JWT-Extended
- WSGI
- Flask-SQLAlchemy
- 部署
- Flask VS Django
- Flask Web
- Flask + Vue
- Flask实战
- Flask 标准目录结构
- Blueprints
- 参考
- FastAPI 测试
- https 证书 Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate