2013年9月15日 星期日

if __name__ == "__main__"

在 python 裡 __name__ 可用來識別當下所執行 module 名稱
讓我們來看以下幾個範例

# file: test1.py
print "the module name is:", __name__


#file: test2.py
print "the module name is:", __name__


#file: test3.py
import test1
import test2
print "the module name is:", __name__

分別執行 test1.py test2.py test3.py 可到如下結果


#>: python test1.py
the module name is: __main__

#>: python test2.py
the module name is: __main__

#>: python test3.py
the module name is: test1
the module name is: test2
the module name is: __main__

我們可以知道,在當下執行的檔案 __name__ 會是 "__main__",若被 import 到其他檔案中被執行到則 __name__ 會是該 module 的名稱,可由執行 test3.py 驗證.

由於 python 是直譯是語言,interpreter 再載入各 module 時同時也會直行該 module 所包含的程式碼.若要避免不必要地誤動作可在各 module 內加入 if __name__ == "__main__",避免程式碼被執行.

我們可將上述檔案改變如下,並觀察執行結果,則可發現在執行 test3.py 的時候可避開 test1.py
與  test2.py 載入時不必要的執行.

# file: test1.py
if __name__ == "__main__":
    print "the module name is:", __name__


#file: test2.py
if __name__ == "__main__":
    print "the module name is:", __name__


#file: test3.py
import test1
import test2

if __name__ == "__main__":
    print "the module name is:", __name__

#>: python test1.py:
the module name is: __main__

#>: python test2.py
the module name is: __main__

#>: python test3.py
the module name is: __main__

沒有留言:

張貼留言