1. 程式人生 > >Python中的if __name__ == '__main__'

Python中的if __name__ == '__main__'

print stack 作用 出現 als 設置 ccf lan 其他

問題

查看別人的代碼經常會出現 if __name__ == ‘__main__‘,這是什麽意思呢,有什麽作用?

由於每個python模塊(python文件)都包含內置的變量name,當運行模塊被執行的時候,name等於文件名(包含了後綴.py)。如果import到其他模塊中,則name等於模塊名稱(不包含後綴.py)。而“main”等於當前執行文件的名稱(包含了後綴.py)。所以當模塊被直接執行時,name == ‘main‘結果為真;而當模塊被import到其他模塊中時,name == ‘main‘結果為假,就是不調用對應的方法。

測試

我們可以寫兩個簡單的程序來觀察這句話的作用:

# a.py
import b

# b.py
print "Hello World from %s!" % __name__

if __name__ == __main__:
    print "Hello World again from %s!" % __name__

運行它們得到輸出:

$ python a.py
Hello World from b!

你可以發現,當一個程序作為模塊被導入時,Python將這個模塊裏的 global()[‘__name__‘] 設置為模塊名,此外,導入後模塊中的所有代碼都將執行,但此時if語句的條件為False,所以不會執行。

$ python b.py
Hello World from __main__!
Hello World again from __main__!

你可以發現,當程序作為文件被執行時,Python將這個文件裏的 global()[‘__name__‘] 設置為 “__main__”,此時if條件成立,裏面的語句被執行。

參考鏈接:

1、https://www.shiyanlou.com/questions/102607

2、https://stackoverflow.com/questions/419163/what-does-if-name-main-do

Python中的if __name__ == '__main__'