摘要:原因很簡單,因為中的代表的就是當前執行的模塊名。缺點就是主程序會受待執行程序的影響,會出現待執行程序中拋異常或主動退出會導致主程序也退出的尷尬問題。總結來說就是,一個是在子進程中執行代碼,一個是在當前進程中執行代碼。
相信剛接觸Python的你一定有過如此經歷,把所有的代碼都寫在 if __name__ == "__main__" 下,因為有人告訴你,這樣比較符合 Pythonista 的代碼風格。
殊不知這段代碼的意義并不是一定要存在于執行代碼中,而是在日常工作中,為了調試某個模塊的正確性,我們往往會在當前模塊下直接寫一個 if __name__ == "__main__" ,測試邏輯寫在下面,這樣,在其他模塊調用這個模塊里的方法也好,類也好的時候,就不會去調用 if __name__ == "__main__" 下面的邏輯了。
原因很簡單,因為 if __name__ == "__main__" 中的 __name__ 代表的就是當前執行的模塊名。
python一切皆對象,所以python的模塊也是對象,他有一個 built-in module,叫 __name__ ,存儲著模塊是如何被執行的,如果是執行當前模塊,那么就顯示 __main__ ,如果是被引用進來的,就顯示被引用的路徑。
好了,解釋完了這個奇妙的 __name__ 后,我們就來看下如何在其他模塊中調用這個 __main__ 呢?
首先來看下我們待被執行的代碼:
import sys def main(args): print(args) if __name__ == "__main__": print("執行如下代碼 __name__ == "__main__"") # 參數隨便指定即可 main(sys.argv[1:])
我們來執行看下結果:
接下來我們來使用 subprocess 模塊來從其他模塊中調用 __main__
import subprocess process = subprocess.run( ["python", "app.py", "miracle"], stdin=subprocess.PIPE, stdout=subprocess.PIPE ) print(process.stdout)
調用結果
使用 subprocess 的「優點」就是因為其實是通過創建一個子進程來執行的程序,所以不受子程序的影響,不會出現程序拋異常或主動退出進程導致主程序也退出的尷尬問題。 「缺點」就是需要創建子進程,相對來說資源消耗比較大。
subprocess 詳細的用法詳見這里不多做介紹,有興趣的可以自行翻閱manual。
接下來我們使用 runpy 模塊來調用看看
import runpy runpy.run_path("app.py", run_name="__main__")
調用結果
使用 runpy 的優點就是不需要創建子進程,相對來說資源消耗比較小。 缺點就是主程序會受待執行程序的影響,會出現待執行程序中拋異常或主動退出會導致主程序也退出的尷尬問題。
runpy 詳細的用法詳見這里不多做介紹,有興趣的可以自行翻閱manual。
這兩種方法就是比較常用的在一個模塊中執行另一個模塊的 if __name__ == "__main__" 的方法。
總結來說就是,一個是在子進程中執行代碼,一個是在當前進程中執行代碼。
好啦,今天的內容就到這了,感興趣的你,可以試試能不能走出來~
注公眾號「Python專欄」,后臺回復「mainmodule」,獲取本文全套源碼!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43419.html
摘要:代碼獲取設備列表信息獲取設備列表信息超時獲取所有已連接設備根據獲取單個當前設備不存在序號為的設備請檢查連接獲取當前屏幕圖像的字節數據保存圖像字節數據保存當前屏幕對象將當前屏幕圖像數據保存為圖片橫屏尺寸處理發生異常為空 部分代碼思路來源于互聯網 需求 之前一直在尋找一種完美的移動設備屏幕流回傳方案,這種嘗試一旦成功即可運用于多種平臺,比如云端測試Portal中對機器設備屏幕的...
摘要:環境問題發現最近剛從換到下搬磚,發現在跑的好好的代碼,在下終端老是報錯還是編碼錯誤注冊失敗坦白說,看到這個錯誤好無奈。既然能在跑,換到就出錯,那多半是環境問題了,然后我就開始了我的調試追蹤之旅了跟蹤調試先前調試都是一晃而過,只看結果。 環境:mac 10.12 python3 django 1.10 問題發現 最近剛從arch 換到 mac下搬磚, 發現在arch跑的好好的代碼,...
摘要:前言繼續向下看廖大教程,看到了函數式編程這一節,當時是覺得沒啥用直接跳過了,這次準備要仔細看一遍了,并記錄下一些心得。 前言 繼續向下看廖大教程,看到了函數式編程這一節,當時是覺得沒啥用直接跳過了,這次準備要仔細看一遍了,并記錄下一些心得。 函數式編程 上學期有上一門叫 人工智能 的課,老師強行要我們學了一個叫做 prolog 的語言,哇那感覺確實難受,思維方式完全和之前學過的不一樣,...
摘要:傳送門這個就是主角歐拉函數。在數論中,對正整數,歐拉函數是小于或等于的正整數中與互質的數的數目。歐拉函數實際上是模的同余類所構成的乘法群即環的所有單位元組成的乘法群的階。 歐拉函數(Euler totient function ) Author: Jasper Yang School: Bupt 前言 gamma函數的求導會出現所謂的歐拉函數(phi),在一篇論文中我需要對好幾個歐...
閱讀 3568·2021-11-16 11:45
閱讀 2122·2021-11-08 13:23
閱讀 2222·2021-10-11 10:59
閱讀 2898·2021-09-27 13:36
閱讀 2486·2019-08-30 15:54
閱讀 2676·2019-08-29 16:58
閱讀 2795·2019-08-29 16:56
閱讀 1347·2019-08-26 13:52