進擊のpython
物件導向進階——__name__=="__main__"
前面我們在講模組的時候,其實還有一個知識點沒有很好的講
那就是main和name
可能你們在看一些程式碼的時候或多或少的都會見到下面的這串程式碼
if __name__ == '__main__':
func()
但是百思不得其解,這行程式碼到底是什麼意思呢?
問題的解決都是一點一點來的
我們先列印這個__name__
看看是啥!
__main__
可以看到列印出來的就是__main__
熬,那就是說這個程式碼是恆成立的
那我要這個程式碼有什麼用呢?
還記得我們在說模組的時候說過
一個py檔案就可以看作是一個模組是吧
那我這個檔案是不是可以叫做模組啊
是不是可以被新的檔案呼叫啊
那我們簡單的豐富一下這個檔案裡面的程式碼
print("這是在if上面的語句")
print(__main__)
if __name__ == '__main__':
print("這是在if下面的語句")
我們現在先在這個檔案下執行,檢視一下結果
這是在if上面的語句
__main__
這是在if下面的語句
然後我們把這個檔案(fesa.py)當作模組
在別的檔案下進行呼叫
結果如下:
這是在if上面的語句
fesa
我們可以看到,這個結果是不一樣的
__name__的列印結果變成了模組的名字
而且,在if下面的語句也沒有被執行
其實也很能理解,因為__name__變了
就不再等於__main__了
沒有滿足條件,當然就不會執行if下面的語句啦
其實,我們在物件導向的時候知道
self其實是例項本身對吧
那麼__main__就可以理解成模組本身
(只能這麼理解,但是實際不是這樣的)
我們學過sys模組
我們可以用sys模組來簡單的展示一下
import sys
for k, v in sys.modules.items():
print(k, v)
列印出來的結果有,但是你能在這麼多的列印資料當中找到
__main__ <module '__main__' from 'D:/xiangmu/asdfg.py'>
看到了嗎?
這個__main__的值,其實就是這個模組本身
所以總結一下:
- 在自己的py檔案裡執行的時候,這句程式碼其實沒有什麼用,正常的執行
- 在被當成模組呼叫的時候,只執行這句話上面的程式碼