若是你剛剛接觸python,相信會在看別人的程序的時候會遇到if __name__ == '__main__'
醬紫的語法,若是當時沒看懂如今也只知其一;不知其二的話,看下去,本文能夠幫你解決這個問題。
你們都知道:Python的一大優勢就是裏面的模塊很是多——包括內置的模塊與自定義模塊。咱們能夠直接利用別人寫好的模塊去實現本身的需求,醬紫大大的提升了本身的開發效率。也就是說,有時候你可能只須要一些文獻閱讀的能力與基本的編碼能力也能夠實現很強大的功能!~~這也許就是Python在各行各業各處開花的緣由吧/嘆氣/嘆氣/嘆氣。
一個故事帶你理解if name == 'main'
某年某月某日,你正坐在工位的電腦前發呆,此時,你的老闆從你背後親切的拍了拍你的肩膀:「小A呀,公司有一個新的產品要開發,裏面有一個模塊須要實現登錄請求功能,這個功能你來寫吧,巴拉巴拉巴拉(告訴你具體的需求)」。此時的你血脈噴張、血壓暴漲。心裏裏一千萬個草泥馬奔騰而過:「我靠!好難!」
過了一個小時,你旁邊工位的老死機王先生又親切的拍了拍你的肩膀:「小A呀,別擔憂呀,公司上一個產品不是也有一個登錄請求的功能模塊嗎?直接拿來用就行了呀。」
「對呀!我不是學過引用麼!那但是Ctr-C/V升級的技能呀!別人寫的模塊我直接拿來用就OK好了啊!」
因而,你以加班的名義於當天半夜悄悄打開了別人的電腦......
次日,熬了一晚的你終於發現了登陸模塊~~~一個名爲main.py的文件,裏面的代碼以下:
# main.py
def check():
print('我正在check...')
def register():
print('我正在註冊...')
def login():
print('我正在登錄...')
check()
register()
login()
此時的你忽然精神百倍、容光煥發!「我靠,真是穿破了鐵鞋找呀找沒找到,你居然如此簡單的就被我找到啦,啊哈哈哈哈哈!」
因而你趁熱打鐵,趕忙在同一個目錄下
建了一個名爲start.py的文件,用了python程序員專屬的進階複製粘貼功能————模塊導入
:
# start.py
from main import login
login()
「萬事俱備,只欠東風!接下來運行一下start.py我就能夠跟老闆要求升值加薪了,哇卡卡卡卡卡!」因而你點擊運行了start.py......
而此時看到結果的你又開始血脈噴張、血壓上升~「我靠!運行的結果爲啥子會是醬紫的啊!」
我正在check...
我正在註冊...
我正在登錄...
我正在登錄...
因而你趕忙檢查代碼:發現main.py文件裏面除了login函數還有兩個函數check與register,並且這個文件也運行了裏面的三個函數,而運行的結果居然跑到了你的start.py文件運行的結果中來了!
「這不科學呀!我只在個人文件裏導入了login,沒有導入其餘的兩個函數呀!並且我只運行了我本身的login呀!爲啥main文件裏的函數也會執行呢!!!」
此時的你感受完全陷入了絕境~想一想早上看到老闆那微微一笑的表情,心理不由打了個冷顫~
「這該如何是好呀!」
而此時看到面有窘迫的你的老王再一次的來到了你的面前:「小A呀,在愁什麼呢?」因而你把你的代碼給老王看了看。
看完事後,老王露出了一絲意味深長的關心的微笑:「小A呀,你知道嗎,當咱們import一個模塊的時候,Python解釋器其實幫咱們在後臺執行了這個文件中的內容的,也就是說,因爲你在start.py文件中import了main.py文件的函數,Python解釋器會先執行main中的內容,而後再執行你本身的start文件中的代碼的。而main文件中調用了它本身的三個函數,因此你執行的結果會包含main文件中執行的結果的。」
聽完了老王的解釋,你忽然明白了,「嗖得寺內!那我直接把main文件中的函數粘貼進來不就能夠了?哎呀,王叔,醬紫是能夠,不過做爲一個Python程序員,醬紫不是顯得太Low了嗎?並且若是之後別人的代碼須要修改的話,我還得複製粘貼,醬紫太麻煩了,嗚嗚嗚嗚嗚嗚」
老王看着委屈的你,露出了關切的笑容:「小A呀,我沒告訴你複製粘貼呀」隨後,他親切的摸了摸你的頭說道:「來,叔叔幫你解決」,因而,老王幫你把main.py中的內容修改以下:
# main.py
def check():
print('我正在check...')
def register():
print('我正在註冊...')
def login():
print('我正在登錄...')
if __name__ == '__main__':
check()
register()
login()
你本身的start.py文件的內容不變,隨後,他運行了一下你的start文件,奇蹟發生了:
我正在登錄...
結果只顯示了一行!並且正是你要的結果!
「其實,if __name__ == '__main__':是在告訴Python編譯器:下面的代碼只有在運行我這個文件的時候才執行,看成爲模塊導入到別的模塊的時候,編譯器只編譯它前面的內容,咱們把函數的執行放在了if __name__ == '__main__':的後面,這樣能夠有效的避免在不須要的時候錯誤的調用了本模塊的方法」
聽完了老王的解釋後,你頓時容光煥發!調試了幾遍無誤並感謝了老王后,興沖沖地跑到了老闆的辦公室......
而此時,老王看着你開心的背影,臉上露出了父親般的親切的笑容......
未完待續.........