1. 程式人生 > >寫了2年python,知道 if __name__ == '__main__' 什麼意思嗎?

寫了2年python,知道 if __name__ == '__main__' 什麼意思嗎?

開發十年,就只剩下這套架構體系了! >>>   

在這裡插入圖片描述

相信剛接觸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__

呢?

首先來看下我們待被執行的程式碼:

import sys

def main(args):
  print(args)

if __name__ == '__main__':
  print("執行如下程式碼 __name__ == '__main__'")
  # 引數隨便指定即可
  main(sys.argv[1:])

我們來執行看下結果:

python

接下來我們來使用 subprocess 模組來從其他模組中呼叫 __main__

import subprocess

process = subprocess.run(
  ['python', 'app.py', 'miracle'],
  stdin=subprocess.PIPE, stdout=subprocess.PIPE
)
print(process.stdout)

呼叫結果

python

使用 subprocess 的「優點」就是因為其實是通過建立一個子程序來執行的程式,所以不受子程式的影響,不會出現程式拋異常或主動退出程序導致主程式也退出的尷尬問題。 「缺點」就是需要建立子程序,相對來說資源消耗比較大。

subprocess 詳細的用法詳見這裡不多做介紹,有興趣的可以自行翻閱manual。

接下來我們使用 runpy 模組來呼叫看看

import runpy

runpy.run_path('app.py', run_name='__main__')

呼叫結果

python

使用 runpy 的優點就是不需要建立子程序,相對來說資源消耗比較小。 缺點就是主程式會受待執行程式的影響,會出現待執行程式中拋異常或主動退出會導致主程式也退出的尷尬問題。

runpy 詳細的用法詳見這裡不多做介紹,有興趣的可以自行翻閱manual。

這兩種方法就是比較常用的在一個模組中執行另一個模組的 if __name__ == '__main__' 的方法。 總結來說就是,一個是在子程序中執行程式碼,一個是在當前程序中執行程式碼。

好啦,今天的內容就到這了,感興趣的你,可以試試能不能走出來~

注公眾號「Python專欄」,後臺回覆「mainmodule」,獲取本文全套原始碼! Pyth   
 
 </div> 
 <div class=

相關推薦

2python知道 if __name__ == &apos;__main__&apos; 什麼意思

開發十年,就只剩下這套架構體系了! >>>   

6程式碼30歲程式設計師要去做外包這個選擇靠譜麼.網友別!

做了6年程式設計師,30歲程式設計師要去做外包,這個選擇靠譜麼.網友,別! 在網際網路行業,作為一名技術人員,大部分人都有換工作的經歷,不過在職業生涯內,換工作的次數也是非常有限的(個人覺得超過2位數就算是比較頻繁了),每一次換工作,都算是人生的重大選擇,都有可能決定今後的命運。因此作出這

15 程式碼總結出提升 10 倍效率的三件事

(轉)寫了 15 年程式碼,總結出提升 10 倍效率的三件事 2017-11-04 Matt Watson 程式人生 作者:Matt Watson  譯者:roy 【譯者注】本文作者 Matt Watson 已經寫了超過 15 年的程式碼,也由此總結出了提升 10

Python 中的 if __name__ == '__main__' 該如何理解

get .cn ogr tro blank try 如何 name 導入 詳解:http://blog.konghy.cn/2017/04/24/python-entry-program/ if __name__ == ‘__main__‘: 我們簡單的理解就是:

【轉載】Python 中的 if __name__ == '__main__' 該如何理解

一個 知識 如果 協程 運行 pat 執行 開始 參考資料 轉自 曠世的憂傷 http://blog.konghy.cn/2017/04/24/python-entry-program/ 程序入口 對於很多編程語言來說,程序都必須要有一個入口,比如 C,C++,以及完全面向

python3----如何簡單地理解Python中的if __name__ == '__main__'

tails 命令 out ons 其中 應該 python -name 1-n 1. 摘要 通俗的理解__name__ == ‘__main__‘:假如你叫小明.py,在朋友眼中,你是小明(__name__ == ‘小明‘);在你自己眼中,你是你自己(__name__ ==

如何理解python中的if __name__ == "__main__":

如何理解python中的if name == “main”: 前言 使用別人的工具的時候,不知道哪裡出了錯,於是仔細看程式碼,在可能出現的模組之前加上了print(“test”),但是就是不能顯示輸出資訊。於是溯源,最後追溯到最前面的 if __name__ == "__main

如何快速簡單粗暴地理解Python中的if __name__ == '__main__'

repr uil 文件導入 alc ron ogr num out module 1. 摘要 通俗的理解__name__ == ‘__main__‘:假如你叫小明.py,在朋友眼中,你是小明(__name__ == ‘小明‘);在你自己眼中,你是你自己(__name__ =

簡單理解Python中的if __name__ == '__main__'

一個.py檔案被其他.py檔案引用假設我們有一個const.py檔案,內容如下: PI = 3.14 def main(): print("PI:", PI) main() # 執行結果:PI: 3.14 1 2 3 4 5 6 7 8

如何簡單地理解Python中的if __name__ == '__main__' 如何簡單地理解Python中的if __name__ == '__main__'

如何簡單地理解Python中的if __name__ == '__main__' 1.摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__na

Python中的if __name__ == '__main__'

print stack 作用 出現 als 設置 ccf lan 其他 問題 查看別人的代碼經常會出現 if __name__ == ‘__main__‘,這是什麽意思呢,有什麽作用? 由於每個python模塊(python文件)都包含內置的變量name,當運行模塊被執

昨天2python開發的同事還在問我 if __name__ == ‘__main__‘ 是什麽

資料 nis pytho 學習者 python學習 path ref 原因 ogr 相信剛接觸Python的你一定有過如此經歷,把所有的代碼都寫在?if __name__ == ‘__main__‘?下,因為有人告訴你,這樣比較符合 Pythonista 的代碼風格。 殊不

谷歌花 2 時間研究 180 個團隊總結出成功的 5 個要素

力量 不用 一個 googl get 管理 new google years 編者按:如何組建一個成功的團隊,是困擾很多管理者的問題。請看這篇由人力資源專家Michael Schneider在inc.com上撰寫的文章Google Spent 2 Years Studyin

爬蟲工程師熬夜這篇文章關於Python爬蟲的一些方法總結!

  爬蟲原理與資料抓取 Requests簡單使用 新增 headers 和 查詢引數                 學習Python中有不明白推薦加入交流群    

8的程式碼做過的專案都下線程式設計師的意義在哪裡!

一、起因 前幾天專案交付上線,所以閒下來了。忽然想起來,自己業餘接的活,有些專案已經不再運營了,所以想清理下域名解析。 上去阿里雲一看,總的大概有15個解析。這15個解析就意味著15個專案。這些專案都是我去談的需求、寫的文件、前後端開發、部署上線維護,整個專案幾乎都是我一人完成的。 想當初,很用心的去開

2018時機終於到!學python轉行人工智慧~

分享一個壞訊息、一個好訊息,還有一個彩蛋邀你來砸,你感覺怎麼樣呢? 一個壞訊息: 2018年1月 教育部印發的《普通高中課程方案和語文等學科課程標準》新加入了資料結構、人工智慧、開源硬體設計等 AI 相關的課程。 這意味著職場新人和準備找工作的同學們,為了在今後十年內不被淘汰,你們要補課

擔心酒店資訊洩露我用Python段加密演算法看你怎麼破

前段時間的酒店資訊洩露事情,鬧的沸沸揚揚!確實我們很多的資料在網路上都是裸奔,在資料庫裡面躺著也都是明文資料,連我自己的寫某某程式都被熱情的粉絲攻破!不如,我們用萬能的Python寫段加密資料傳送玩玩,也許就能避免酒店資料洩漏了! 簡單的場景: Serve

8的程式碼做過的專案都下線程式設計師的意義在哪裡?

我堅信未來是我的,也是你的。但歸根結底是程式設計師的! ——忘記來自哪裡了 程式碼,正在改變世界。正是因為有了程式碼的存在,才有了百度、阿里巴巴、騰訊、京東、等的存在...... 下面是一位來自工作了八年的資深碼農的深刻感悟,正值“1024 程式設計

Python開發月薪還沒20K是不是涼

文章標題不是想騙大家過來看哈,只是最近特別想說幾句話,但是思來想去又覺得這些話不該說,因為肯定會招來很多很多程式設計師的攻擊甚至是謾罵。 我就想,何必呢,像我這樣溫順又沒有攻擊力的耿直女神,專心寫點我愛寫的程式設計程式碼,心靈雞湯多好,幹嘛說那樣吃力不討好的話呢

練習python一個四則運算程式支援乘方和“.3"這種格式

#!/usr/bin/python #coding=utf-8 # 本程式由使用者輸入一個表示式字串,然後計算這個表示式的值 # 表示式是一個四則運算表示式,可以包含^操作符# 注意:乘方用^運算子,支援".3"這種表示小數的形式。負數需要用括號擴起來 # 思路:利用棧的方