— Posted in 程式設計

[轉錄]Python 程式裡的 __name__ 可以用來分辨程式是直接執行還是被 import 的

來源:http://technology-sea.blogspot.tw/2012/03/python-name-import.html

剛開始寫 python 的時候,看到幾乎每個程式的最後面都有一段 code:

if __name__ == ‘__main__’:
doSomething()

一直都不懂那是什麼意思,只知道要照抄然後執行程式時那段就會被執行。後來深入研究之後才比較瞭解 __name__ 的意思了。

原來如果一個 python script 是被別的 python script 當成 module 來 import 的話,那麼這個被 import 的 python script 的 __name__ 就會是那個 python script 的名稱。而如果這個 python script 是直接被執行的話,__name__ 就會是 __main__。

舉例來說,如果我有一個程式叫做 myModule.py,內容就是一行顯示自己的 __name__:

print ‘__name__:’ + __name__

那麼我直接執行它的話,結果會顯示 __main__:

bash-3.2$ python myModule.py
__name__:__main__

但如果我準備了另一個程式叫做 testModule.py,裡面就這麼一行去 import myModule:

import myModule

然後我去執行 testModule.py 的話,則會顯示 myModule:

bash-3.2$ python testModule.py
__name__:myModule

所以用 __name__ 就可以分辨我的程式是被 import 當成模組還是被直接執行的。這樣附帶的好處就是如果我寫的程式平常可以被 import 來使用,但有時它自己也可以直接執行。其它語言的話,可能就要區分 library 跟使用 library 的程式,而 python 的話這兩者的界線就很模糊。