當你運行一個 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