2008-11-13 78 views
14

我應該開始一個Python程序有:Python程序啓動

if__name__ == '__main__': 
some code... 

如果是這樣,爲什麼呢?我多次看到它,但對此毫無頭緒。

+0

@Kirill Titov:請不要編輯問題來說「已關閉」。它並沒有關閉。你選擇了一個答案 - 這是完美的,你需要做的。做更多是令人困惑的。 – 2008-11-13 16:38:44

回答

23

如果您的程序可用作庫,但您也有主程序(例如測試庫),那麼該構造允許其他人將文件作爲庫導入,而不運行主程序。如果您的程序名爲foo.py,並且您從另一個python文件「import foo」,__name__的計算結果爲'foo',但是如果從命令行運行「python foo.py」,則__name__的計算結果爲'__main__'

請注意,你需要插入一個空間,如果和_之間,並縮進主程序:

if __name__ == '__main__': 
    main program here 
+0

+1:重用很重要。一個模塊可以有2條命。作爲主要計劃。作爲其他主要計劃的組成部分。作爲主要的程序是事情。作爲組件,它只是定義了一些東西。 – 2008-11-13 15:41:07

+0

這可能不用說,但要確保這個條件在你的文件末尾。 – 2008-11-14 00:51:43

3

這是很好的做法。首先,它清楚地標記了你的模塊入口點(假設你沒有任何其他可執行代碼在頂層 - 惡作劇)。其次,它使得你的模塊可以被其他模塊導入而不被執行,像代碼檢查器,打包器等工具需要做的事情。

22

一個更好的模式是這樣的:

def main(): 
    ... 

if __name__ == '__main__': 
    main() 

這使你的代碼的人誰進口的,同時也使節目如pycheckerpylint工作調用。

+0

謝謝!我擔心整個程序必須從一開始就縮進。我不喜歡那樣。 – 2008-11-13 16:40:25

18

吉多·範羅蘇姆suggests

def main(argv=None): 
    if argv is None: 
    argv = sys.argv 
    ... 

if __name__ == "__main__": 
    sys.exit(main()) 

這樣你可以從別的地方(供應參數)運行main(),如果你想用一個錯誤代碼main()只是return 1退出,並獲得了」不要讓交互式解釋器錯誤地退出。