我的博客 在寫python腳本的時候,例如,我寫一個test1.py def test(n): print(n) if __name__ == '__main__': n = 1 test(1) 接下來打開cmd命令視窗,執行命令 python test.py 結果是把1列印出來 這時候就會有同學有 ...
在寫python腳本的時候,例如,我寫一個test1.py
def test(n): print(n) if __name__ == '__main__': n = 1 test(1)
接下來打開cmd命令視窗,執行命令
python test.py
結果是把1列印出來
這時候就會有同學有疑問了,我直接寫不行麽,在test1.py的同一個目錄下創建test2.py
def test(n): print(n) n = 1 test(1)
這時候嘗試執行test2.py,執行結果是一樣的,那我幹嘛非要多浪費一行代碼寫那玩意呢
其實python有個特性,就是這個文件是可以通過import在另一個python腳本中引用的,現在,在test1.py的同一個目錄下加一個空文件的__init__.py,其實不加也行,系統會自動生成
然後在修改下test1.py這個文件
import test2 #增加這行,引用剛剛的test2 def test(n): print(n) if __name__ == '__main__': n = 1 # test(1) 把這行註釋掉,不執行 test2.test(n)
執行python test1.py測試下
這裡會列印出兩個1,是不是很奇怪,按理說應該和直接執行test2時候是一樣的,列印一個1啊,這就不得不說到__name__這個系統變數了,現在把test2.py改一下
def test(n): print(n) print('__name__ is: ' + __name__) #把__name__的信息列印出來 n = 1 test(1)
再次執行test1.py
看到沒,在引用的時候__name__變數是test2,就是引用的文件名,所以if __name__ == '__main__'是False,不會執行
現在直接執行test2.py
看到了吧,直接執行test2.py的時候__name__變數是__main__,那麼if __name__ == '__main__'就成了True,會執行
也就是說if __name__ == '__main__'加上這句實際上是為了避免調用的時候錯誤的把測試的內容執行了,現在再改下test2.py
def test(n): print(n) # 加上if __name__ == '__main__' if __name__ == '__main__': print('__name__ is: ' + __name__) #把__name__的信息列印出來 n = 1 test(1)
再次執行test1.py,現在的執行結果就是期望的一個1的結果啦