1. 程式人生 > 其它 >為什麼要寫if __name__ == '__main__': ???

為什麼要寫if __name__ == '__main__': ???

同目錄下有兩個檔案t4.py,t5.py

t4.py的程式碼

class T4:
    def f1(self):
        print('t4 TEST f1')

t = T4()
t.f1()

t5.py的程式碼

from output.case.t4 import T4

class T5:
    def f1(self):
        print('t5 TEST f1')

    def f2(self):
        print('t5 TEST f2')

t = T5()
t.f1()
t.f2()

在t5.py裡面執行,會輸出
t4 TEST f1
t5 TEST f1
t5 TEST f2
可以看到在匯入t4的時候,t4的程式碼也被執行了,那怎麼辦呢?t4的程式碼這樣寫就可以

class T4:
    def f1(self):
        print('t4 TEST f1')

if __name__ == '__main__':
    t = T4()
    t.f1()

這樣子,在t5執行的時候,輸出就是這樣
t5 TEST f1
t5 TEST f2
t4的程式碼就不會被執行,先說結論:if裡面的程式碼塊在當前模組被其他模組呼叫的時候不會被執行!

那為什麼呢?我們接著看
在t4.py列印一下__name__,可以看到就是__main__,

class T4:
    def f1(self):
        print('t4 TEST f1')

print(f"__name__: {__name__}")

__name__: __main__

然後我們再執行一下t5.py,d輸出的是t4

import t4

class T5:
    def f1(self):
        print('t5 TEST f1')

    def f2(self):
        print('t5 TEST f2')
__name__: t4

所以在t4.py中加上if name == 'main':,只是加了一個判斷,如果兩個字串相等說明是在當前檔案內執行,自然會執行裡面的程式碼塊,而在t4被t5呼叫時,這個判斷的結果肯定是false,必然不會執行裡面的程式碼塊!

class T4:
    def f1(self):
        print('t4 TEST f1')

if __name__ == '__main__':
    t4 = T4()
    t4.f1()

現在你明白原理了吧?