2015-07-20 14 views
7

必須/應該Python腳本有一個main()函數?例如是否確定與必須Python腳本定義一個函數爲主?

if __name__ == '__main__': 
    entryPoint() 

(或一些其他有意義的名稱)

+1

是。這一點魔力只會阻止你的腳本在導入時運行的主要功能。這只是說「如果我是主腳本,請調用此函數」。 –

+0

@MorganThrapp:你是在回答標題或正文中的問題嗎?因爲它們是矛盾的。 ;) –

+0

糟糕,甚至沒有注意到。我回答了是否可以重命名'main()' –

回答

10

更換

if __name__ == '__main__': 
    main() 

使用一個名爲main()功能僅僅是一個慣例。你可以給它任何你想要的名字。

測試的模塊名稱是只是一個好的技巧以防止代碼運行時,你的代碼沒有被作爲__main__模塊執行(即不是當導入爲Python的開始與劇本,但導入爲模塊)。您可以在if測試下運行您喜歡的任何代碼。

使用在這種情況下,一個功能有助於保持你的模塊的全局命名空間整潔通過分流名到本地命名空間來代替。命名該功能main()是司空見慣的,但不是要求。

+0

的問題。實際上,當腳本作爲'__main__'模塊執行時,它是製作代碼的一種技巧(不會阻止它)。 – martineau

+2

@martineau:不,全局級別的所有代碼在導入模塊時運行(不管它是直接作爲腳本還是因爲它是間接導入的)。如果不直接將腳本作爲腳本運行,那麼'if __name__'測試會禁用*代碼。我看到我的文字弄糊塗了,解決了這個問題。 –

7

不,Python腳本不必有main()功能。它只是遵循約定,因爲您在if __name__ == '__main__':語句中放置的函數是真正執行腳本所有工作的函數,所以它是主要功能。如果確實有函數名稱會使程序更易於閱讀和更清晰,則可以改爲使用該函數名稱。

事實上,你甚至不需要if __name__ == '__main__':部分,但這是一個很好的做法,不只是一個約定。它只會阻止main()函數或其他任何您希望在將文件作爲模塊導入時從中運行的函數。如果您不會導入腳本,您可能可能不需要它,但它仍然是一個好習慣。欲瞭解更多關於這一點,它爲什麼它做什麼,看到What does if __name__ == "__main__": do?

相關問題