讓我們來看以下幾個範例
# 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__
the module name is: __main__
#>: python test2.py
the module name is: __main__
#>: python test3.py
the module name is: __main__
沒有留言:
張貼留言