2012-12-18 51 views
2

我想聽聽關於這個問題的看法:這是一個壞主意,有大量的代碼後Python的設計:代碼後,「如果__name__ == __main__」測試

if __name__ == '__main__':

我之所以我問的是,我目前的項目有大約400行代碼,隨着它的增長,我在上面的陳述之後不斷添加行。所以這個程序預計會有大約3000行代碼,我很擔心,在這個陳述之後我會有太多的代碼。所以這個問題'在這個陳述之後寫很多代碼是不是一種好的pythonic方法?'

+0

我以爲'__main__'的用途是如果你正在編寫一個庫文件而不是應用程序入口點。當你編寫的.py文件被導入時,'__name__!='__main __'並且你的if語句中的任何內容都將被忽略,如果你在一個文件中編寫整個應用程序,你真的需要檢查嗎? – dlp

回答

1

這聽起來像有兩個不同點,使這裏:

  • 所有其他的事情都是平等的,這是爲了可讀性,可測試性,可維護性更好的(和「-Ability或許一些其他值「)來定義封裝由400行命令代碼表示的行爲的函數。通過__name__ == '__main__'合格

  • 代碼是只有當該文件被直接調用,而不是被包括作爲與import一個模塊執行。所以,當作爲源參數到Python的調用,而不是被導入時提供像

    def be_awesome(): 
        pass 
    
    
    if __name__ == '__main__': 
        def be_more_awesome(): 
         pass 
    

文件只會有一個定義be_more_awesome。作爲一般規則,那麼在__name__測試之後恰當地放置僅當該文件作爲腳本直接運行時才應該運行的代碼。問自己這些問題

  • 「如果我將該模塊導入到另一個文件中,運行此代碼會不好嗎?」
  • 「當我直接調用此文件時是否需要調用此代碼?「(如在一個假設main功能的封裝你400行的情況下)

如果答案要麼這些問題是‘是’,它(可能)所屬的__name__試驗後,如果沒有,它(可能)沒有。

5

一個簡單的替代方法是將主代碼添加到main()函數中,並在__name__檢查後調用它。這樣一來,你會得到:在__name__檢查

  • 的好處功能的
  • 好處(這可能會或可能不會被重用)
  • 內省的收益(例如,如果你需要它,自動分析模塊的「主」代碼是很容易的,它只是功能的一部分!)。

一個例子:

def main(): 
    # Be awesome here. 

if __name__ == '__main__': 
    main() # or sys.exit(main()), if you want to return an exit code 
+0

非常感謝你,我會按照你的建議 – Vor

1

如果你想重用代碼,你不應該把它if __name__ == '__main__'後(用這個函數/類/模塊,並進行簡單的電話可能從該部分的程序)。讓我在這裏提到Python的禪(至少兩點在你的情況):

稀疏比密集好。

可讀性計數。

+0

非常感謝你的回答。 – Vor

相關問題