前言
成都創(chuàng)新互聯(lián)是專業(yè)的望都網(wǎng)站建設公司,望都接單;提供成都網(wǎng)站建設、成都網(wǎng)站設計,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行望都網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!在 Python 中,我們經常會看到
if__name__?=='__main__':
那么你真的理解此寫法的作用嗎?今天我們就來聊一聊它真正的含義。
筆者最喜歡的就是用示例講明白一個問題,這次也不例外,依然是看例子來說話!
示例說話
舉個例子來說:
有一個物體質量 m=10,g=9.8 (重力參數(shù)),求它的重力。
公式:G=m*g
所以創(chuàng)建一個 param.py 的文件,其中代碼如下:
在創(chuàng)建一個 sum.py 的文件求 G ,代碼如下:
結果如下:
結果可以看到,在 param.py 文件中的 main 函數(shù)也被執(zhí)行了,而實際上我們并不希望它被執(zhí)行,只是想 G 被打印出來即可。
此時?if __name__ == '__main__'?便派上了用場。我們將 param.py 中稍作修改:
加上后,Pycharm 中多了一個綠色小按鈕,點擊后:
可以看到,在 param.py 中加上這么一句話,起到了一個入口函數(shù)的作用,也就是說對于 param.py 來說,程序入口是從這里開始的。同時不影響它自身的 g 打印輸出,那么來看下求 G 中的程序。
求重力 G 的程序中,我們是沒有改變任何代碼的,可以看到結果已經變了。
結論
if __name__ == '__main__'?相當于 Python 模擬的程序入口。Python 本身并沒有規(guī)定這么寫,這只是一種編碼習慣。由于模塊之間相互引用,不同模塊可能都有這樣的定義,而入口程序只能有一個。到底哪個入口程序被選中,這取決于?name?的值。
__name__是內置變量,用于表示當前模塊的名字。
所以,
if __name__ == '__main__'
我們簡單的理解就是:如果本模塊是被直接運行的,則代碼塊被運行,如果本模塊是被導入到其它模塊中去,則處于?name?中的代碼不被運行。
官方文檔
查閱官方文檔可以看到相應的解釋:
什么?看不懂,來個中文的!~
原文鏈接
https://docs.python.org/3/library/main__.html?highlight=__name
關于 Flask 中的拓展知識
學過 Flask 的同學,可以看下此知識點,沒有學過的也可以了解一下,萬一后續(xù)用到了呢,有可能面試中會問到的一個小知識點。
在 Flask 框架中,我們通常使用下面的代碼來進行項目的啟動:
上面的代碼是官方給出來的一段最快啟動的小 demo。不難發(fā)現(xiàn),在官方定義的代碼中,入口函數(shù)把 app.run() 放在了if __name__ == '__main__'里。
但是有沒有想過為什么要放在里面呢?
正常開發(fā)情況下調用 app.run() 啟動,使用的 web 服務器是 Flask 自帶的一個簡單內置服務器。
對于生產環(huán)境而言,啟動一個 Flask 項目是不能直接通過 Python 去運行的,因為還面臨著很多問題,比如并發(fā)性不好,無法監(jiān)控項目各指標等。。。
所以在正式的生產環(huán)境中,我們是不會使用 Flask 自帶的服務器的,而是通過 nginx + uwsgi 來部署項目。nginx 作為前置服務器,用來接收瀏覽器發(fā)來的請求,接著會把請求轉發(fā)給 uwsgi ,uwsgi 會以配置文件的形式加載我們寫好的項目,而加載入口則是本地開發(fā)環(huán)境下的 app.run() 方法所在的入口模塊。就像下圖:
于是,在生產環(huán)境下, app.run() 所在的模塊相對于 uwsgi 來說便不是入口文件了,它是需要被導入到 uwsgi 中的一個普通模塊。使用if __name__ == '__main__'?的用途就是,不讓 app.run()進行啟動。也就是禁止所謂 Flask 自帶的服務器啟動。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。