if __name__ == "__main__"
是什麼?if __name__ == "__main__"
?if __name__ == "__main__"
是什麼?常被稱為:
if __name__ == "__main__"
是一個條件判斷語句__name__
是什麼?
因此if __name__ == "__main__"
這句話就像是在問:
「如果這本書的名字是 __main__,也就是說,你正在直接讀我,那麼請讀下面的內容。」
這樣,只有在你"直接"讀這本書的時候,才會讀到這部分的內容;
如果你只是把這本書的故事拿去用,這些內容就不會被讀到。
這意味著 只有在直接執行這個檔案時,位於該條件下的程式碼才會被執行;如果是被匯入,則不會執行。
例子:我的故事書 my_story.py:
def tell_story():
print("從前從前,有一個小朋友愛聽故事。")
if __name__ == "__main__":
print("開始講故事:")
tell_story()
情況一:直接讀這本書
當你執行這本書時(直接運行 my_story.py),書會說:
開始講故事:
從前從前,有一個小朋友愛聽故事。
情況二:把故事拿給別人用
當別人在他們的程式中寫:
import my_story
my_story.tell_story()
他們執行程式時,只會看到:
從前從前,有一個小朋友愛聽故事。
注意: 他們不會看到「開始講故事:」,因為 if name == "main": 下的內容不會被執行。
這樣做可以讓你的程式有雙重功能:
if __name__ == "__main__"
?# calculator.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
if __name__ == "__main__":
# 只有在直接執行時才會運行的程式碼
num1 = float(input("請輸入第一個數字:"))
num2 = float(input("請輸入第二個數字:"))
print(f"加法結果:{add(num1, num2)}")
print(f"減法結果:{subtract(num1, num2)}")
# string_utils.py
def to_uppercase(s):
return s.upper()
if __name__ == "__main__":
# 測試或範例程式碼
sample = "hello world"
print(f"原始字串:{sample}")
print(f"大寫字串:{to_uppercase(sample)}")
直接執行 string_utils.py 時:會顯示範例輸出。
匯入 string_utils.py模組:只提供 to_uppercase 函式,不會執行範例程式碼。
# config.py
DATABASE_URI = "sqlite:///:memory:"
API_KEY = "your_api_key_here"
用途: 提供變數或設定,供其他程式匯入。
不需要 if name == "main",因為沒有需要執行的程式碼。
if name == "main" 是一個條件判斷語句,用於當你希望某些程式碼 僅在檔案被直接執行時 才運行,而在該檔案被匯入為模組時不執行。
使用時機: