首頁 > 後端開發 > Python教學 > `if __name__ == '__main__':` 在 Python 中做什麼以及為什麼它很重要?

`if __name__ == '__main__':` 在 Python 中做什麼以及為什麼它很重要?

Patricia Arquette
發布: 2024-12-24 03:52:14
原創
785 人瀏覽過

What Does `if __name__ ==

name == "__main__" 有何作用?為什麼需要這樣做?

當 Python 腳本作為主程式執行時,解釋器將特殊變數 __name__ 賦給「__main__」。如果腳本由另一個程式作為模組導入,則 __name__ 將設定為導入模組的名稱。

要理解為什麼這很重要,請考慮以下範例:

# Suppose this is foo.py.

print("before import")
import math

print("before function_a")
def function_a():
    print("Function A")

print("before function_b")
def function_b():
    print("Function B {}".format(math.sqrt(100)))

print("before __name__ guard")
if __name__ == '__main__':
    function_a()
    function_b()
print("after __name__ guard")
登入後複製

執行流程:

  1. 特殊變數設定:

    • 名稱名稱
  2. 名稱
  3. 名稱

    。 “__main__”,因為foo.py作為主程式運行。

    • 代碼執行:

      • 腳本逐行執行其所有代碼:
    • 列印“導入之前”,載入數學模組等。
    • 定義函數function_a 和function_b.
    • name
    • 檢查被評估:因為它會符合“main”,所以if 區塊中的所有程式碼都會被執行(列印“Function A”和“Function B 10.0")。
名稱

檢查下面的程式碼被執行(列印「after name__guard」)。

名稱
    的重要性檢查:
  • 此檢查是至關重要,因為:
  • 此檢查是至關重要,因為:
  • 保護來自意外呼叫: 如果foo.py 沒有
  • name
檢查,將其作為模組導入將觸發腳本使用導入腳本的命令列參數運行,這通常是不需要的。

Pickle 檔案問題:

如果foo.py 將自訂類別儲存到pickle 檔案中,請在另一個腳本會匯入foo.py 並在沒有
    name
  • 檢查的情況下執行其程式碼,從而導致上述問題。
  • 附加說明:您可以在腳本中進行多個
  • name
  • 檢查,但它是不常見。
  • 使用
  • name
執行腳本foo2.py 檢查「a1」、「m1」、「a2」、「b」、「a3」、「m2」所包含的結果,「t2 ”,同時刪除名稱檢查結果為“a1”,“a2”,“b”,“a3”, “t2”。 將foo3.py 作為腳本運行會產生“t1”、“a1”、“a2”、“b”、“a3”、“t2”,而將其作為模組結果導入在foo4.py 中將__name__ 設定為「__main__」(即使以模組匯入)表示腳本在匯入時將始終執行,因為__name__ == __main__ 將始終評估為 True。

以上是`if __name__ == '__main__':` 在 Python 中做什麼以及為什麼它很重要?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板