爲何python裏要 if __name__ == ‘__main__’:

儘管python容許你像shell腳本同樣,把大段的代碼堆積着寫,可是,不少python入門的書,都會建議你把代碼寫成一個函數,而後在最後面統一調用,例如這樣: html

def main(): #具體代碼   if __name__ == '__main__':
    main()

不少文章都會說這個是因爲代碼風格之類的緣由,可是其實,不這樣寫,有時候也是會直接致使出錯的。
舉個例子,打開《A Byte of Python》的類變量那節,能夠這裏看在線版本,而後把中間的那示例代碼複製下來,運行,能夠看到,確實能獲得預期正確的結果。
可是,如今把那代碼裏的全部「swaroop」換成「xxx1」,再把全部「kalam」換成「yyy1」,再運行,就會在程序運行的最後時刻,獲得這麼一個奇怪的錯誤(Python 2.6.5下實驗):
Exception AttributeError: "'NoneType' object has no attribute 'population'" in > ignored
也就是說,換了個變量名,程序就出錯了。。。
究其緣由,應該是python在最後析構全部類和對象的時候,並無處理這些對象之間的依賴關係,而是根據變量名來決定某種順序操做了。從而致使Person類自己,先於yyy2被幹掉了,因此在解構yyy2的時候,執行它的__del__()方法,卻發現父類都已經沒有了~~
這應該確實算是python解析器的bug,可是,若是那把這個例子裏的全部class Person之外的代碼,寫到一個main()函數裏,再經過上述方法調用的話,就不會發生這種錯誤了。
因此,你們最好仍是別太在乎多幾行代碼,養成這個好習慣吧。 python

要深究此錯誤的緣由,能夠看官方文檔裏的描述,並在這裏討論。 shell

相關文章
相關標籤/搜索