Python if __name__ == '__main__': 用法
Python 程式裡的 __name__ 可以用來分辨程式是直接執行還是被 import 的
剛開始寫 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
結論:
1.直接執行與被執行
2.直接執行 __name__ == '__main__':
3.被執行 import myModule
4.所以用 __name__ 就可以分辨我的程式是被 import 當成模組還是被直接執行的。這樣附帶的好處就是如果我寫的程式平常可以被 import 來使用,但有時它自己也可以直接執行。其它語言的話,可能就要區分 library 跟使用 library 的程式,而 python 的話這兩者的界線就很模糊。
剛開始寫 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
結論:
1.直接執行與被執行
2.直接執行 __name__ == '__main__':
3.被執行 import myModule
4.所以用 __name__ 就可以分辨我的程式是被 import 當成模組還是被直接執行的。這樣附帶的好處就是如果我寫的程式平常可以被 import 來使用,但有時它自己也可以直接執行。其它語言的話,可能就要區分 library 跟使用 library 的程式,而 python 的話這兩者的界線就很模糊。
留言
張貼留言