python
相信剛接觸Python的你一定有過如此經曆,把所有的代碼都寫在 if __name__ == '__main__' 下,因為有人告訴你,這樣比較符合 Pythonista 的代碼風格。
殊不知這段代碼的意義并不是一定要存在于執行代碼中,而是在日常工作中,為了調試某個模塊的正确性,我們往往會在當前模塊下直接寫一個 if __name__ == '__main__' ,測試邏輯寫在下面,這樣,在其他模塊調用這個模塊裡的方法也好,類也好的時候,就不會去調用 if __name__ == '__main__' 下面的邏輯了。
原因很簡單,因為 if __name__ == '__main__' 中的 __name__ 代表的就是當前執行的模塊名。
python一切皆對象,所以python的模塊也是對象,他有一個 built-in module,叫__name__ ,存儲着模塊是如何被執行的,如果是執行當前模塊,那麼就顯示 __main__ ,如果是被引用進來的,就顯示被引用的路徑。
python開發
好了,解釋完了這個奇妙的 __name__ 後,我們就來看下如何在其他模塊中調用這個 __main__ 呢?
首先來看下我們待被執行的代碼:
我們來執行看下結果:
python開發
接下來我們來使用 subprocess 模塊來從其他模塊中調用 __main__
調用結果
python開發
使用 subprocess 的「優點」就是因為其實是通過創建一個子進程來執行的程序,所以不受子程序的影響,不會出現程序抛異常或主動退出進程導緻主程序也退出的尴尬問題。 「缺點」就是需要創建子進程,相對來說資源消耗比較大。
subprocess 詳細的用法詳見這裡不多做介紹,有興趣的可以自行翻閱manual。
接下來我們使用 runpy 模塊來調用看看
調用結果
使用 runpy 的優點就是不需要創建子進程,相對來說資源消耗比較小。 缺點就是主程序會受待執行程序的影響,會出現待執行程序中抛異常或主動退出會導緻主程序也退出的尴尬問題。
runpy 詳細的用法詳見這裡不多做介紹,有興趣的可以自行翻閱manual。
這兩種方法就是比較常用的在一個模塊中執行另一個模塊的 if __name__ == '__main__' 的方法。
總結來說就是,一個是在子進程中執行代碼,一個是在當前進程中執行代碼。
好啦,今天的内容就到這了,感興趣的你,可以試試能不能走出來~
私信我:mainmodule,獲取本文全套代碼
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!