2011-11-22 62 views
8

可能重複:
What does <if name==「main」:> do?在Python中,「if name ==」__main __「」是什麼意思?

我已經用Python寫的,現在劇本相當長的一段時間,我學習更多的Python的,因爲我需要它。在閱讀其他人的代碼時,我經常遇到if name == "__main__":構造。

這有什麼好處?

+1

哦,我明白了...'如果__name __ =「__ __主」:'檢查枯萎的腳本是一個獨立的或模塊。 – Adobe

+1

對於複製和/或避免混淆,請注意前面評論中的拼寫錯誤: 'if __name __ ==「__ main __」:' – alberto

回答

20

這允許您將相同的文件作爲庫(通過導入它)或作爲應用程序的起點使用。

例如,請考慮以下文件:

# hello.py 
def hello(to=__name__): 
    return "hello, %s" % to 

if __name__ == "__main__": 
    print hello("world") 

您可以使用該代碼在兩個方面。首先,你可以編寫一個導入它的程序。如果導入庫,__name__將是庫的名稱,因此檢查將失敗,並且代碼不會執行(這是所需的行爲):

#program.py 
from hello import hello # this won't cause anything to print 
print hello("world") 

如果你不想寫

$ python hello.py 
hello, __main__ 

這種行爲完全取決於該蟒蛇將設置基於磁帶庫是進口的還是直接由運行特殊變量__name__:第二個文件,你可以直接與像運行在命令行代碼翻譯。如果直接運行,它將被設置爲__main__。如果導入它將被設置爲庫名(在這種情況下,hello)。

通常這種構造用於將單元測試添加到您的代碼中。這樣,當你編寫一個庫時,你可以直接在文件中嵌入測試代碼,而不必擔心在以普通方式使用庫時它會被執行。當你想測試庫時,你不需要任何框架,因爲你可以像運行程序一樣運行庫。

參見__main__ in the python documentation(雖然它是非常稀少)

3

基本上,

有「主」腳本文件,並且是進口的或以其他方式引用的外部文件之間的區別。如果腳本是「主」腳本,則特殊變量__name__將等於"__main__"

您可以使用它來保護腳本所具有的類和變量的「執行」代碼。這使您可以導入腳本並使用類和變量,而無需實際運行該腳本的主代碼(如果有)。

+0

Bonus-trivia:在__name__中找到了什麼,如果您導入模塊碰巧被命名爲「__main__」? – Agrajag