再撐一下!明天就是星期五了!
回顧一下昨天的執行結果:
>>> python main_1.py
This __name__ is age_1
In main, the __name__ is __main__
20
>>> python main_2.py
This __name__ is age_2
32
In main, the __name__ is __main__
20
若只有執行age_1.py或者age_2.py時,此時__name__
會被指定為'__main__'
,所以當滿足下面的if
時,就會往下執行。
若執行python main_2.py時,會import age_2.py,此時主要的執行程式是python main_2.py,所以在主程式中的__name__
會被指定為'__main__'
,然而在age_2.py中的__name__
會被指定為'age_2'
,然而可以發現,因為在age_2.py中缺乏「if __name__ == '__main__'
」,因此不管如何,只要主程式call age_1時,裡面的每一行都會執行一次,造成回傳的結果會包含print(difage(62,30))
這個結果後,才會執行print(difage(50,30))
若執行python main_1.py時,會import age_1.py,此時主要的執行程式是python main_1.py,所以在主程式中的__name__
會被指定為'__main__'
,然而在age_1.py中的__name__
會被指定為'age_1'
,然而可以發現,因為在age_1.py有「if __name__ == '__main__'
」可以控制age_1.py的執行,因此當主程式call age_1時,即使每一行都會執行一次,但並不會執行print(difage(62,30))
這個結果,而只會執行主程式的print(difage(50,30))
。
在於獨立撰寫一些funtion時,可以直接執行funtion看其能不能work,功能是否正常。然而這一個function實際上是要給一個大的主程式所使用,若每一次都要檢查function能不能work,功能有沒有正確,都要執行main,是一個費時又費力的過程,若能直接執行funtion檢查功能是否正常,相對有效率!
簡言之,我們透過「if name == 'main'
」來控制funtion,可以將測試資料放在「if name == 'main'
」的階層下,當單純執行function的執行檔時,則會利用測試資料檢測其功能;當利用main呼叫function操作時,就不會執行測試資料!只會直接執行main所想代入之變數,傳到function運算後將結果回傳給main!
if __name__ == '__main__'
絕對是你的好碰油好啦~今天就講到這啦~