如何真正理解ifname的作用-創(chuàng)新互聯(lián)

前言

成都創(chuàng)新互聯(lián)是專業(yè)的望都網(wǎng)站建設(shè)公司,望都接單;提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行望都網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

在 Python 中,我們經(jīng)常會看到

if__name__?=='__main__':

那么你真的理解此寫法的作用嗎?今天我們就來聊一聊它真正的含義。

筆者最喜歡的就是用示例講明白一個問題,這次也不例外,依然是看例子來說話!

示例說話

舉個例子來說:

有一個物體質(zhì)量 m=10,g=9.8 (重力參數(shù)),求它的重力。

公式:G=m*g

所以創(chuàng)建一個 param.py 的文件,其中代碼如下:

如何真正理解 if name 的作用

在創(chuàng)建一個 sum.py 的文件求 G ,代碼如下:

如何真正理解 if name 的作用

結(jié)果如下:

如何真正理解 if name 的作用

結(jié)果可以看到,在 param.py 文件中的 main 函數(shù)也被執(zhí)行了,而實際上我們并不希望它被執(zhí)行,只是想 G 被打印出來即可。

此時?if __name__ == '__main__'?便派上了用場。我們將 param.py 中稍作修改:

如何真正理解 if name 的作用

如何真正理解 if name 的作用

加上后,Pycharm 中多了一個綠色小按鈕,點(diǎn)擊后:

如何真正理解 if name 的作用

可以看到,在 param.py 中加上這么一句話,起到了一個入口函數(shù)的作用,也就是說對于 param.py 來說,程序入口是從這里開始的。同時不影響它自身的 g 打印輸出,那么來看下求 G 中的程序。

如何真正理解 if name 的作用

求重力 G 的程序中,我們是沒有改變?nèi)魏未a的,可以看到結(jié)果已經(jīng)變了。

結(jié)論

if __name__ == '__main__'?相當(dāng)于 Python 模擬的程序入口。Python 本身并沒有規(guī)定這么寫,這只是一種編碼習(xí)慣。由于模塊之間相互引用,不同模塊可能都有這樣的定義,而入口程序只能有一個。到底哪個入口程序被選中,這取決于?name?的值。

__name__是內(nèi)置變量,用于表示當(dāng)前模塊的名字。

所以,

if __name__ == '__main__'

我們簡單的理解就是:如果本模塊是被直接運(yùn)行的,則代碼塊被運(yùn)行,如果本模塊是被導(dǎo)入到其它模塊中去,則處于?name?中的代碼不被運(yùn)行。

官方文檔

查閱官方文檔可以看到相應(yīng)的解釋:

如何真正理解 if name 的作用

什么?看不懂,來個中文的!~

如何真正理解 if name 的作用

原文鏈接

https://docs.python.org/3/library/main__.html?highlight=__name

關(guān)于 Flask 中的拓展知識

學(xué)過 Flask 的同學(xué),可以看下此知識點(diǎn),沒有學(xué)過的也可以了解一下,萬一后續(xù)用到了呢,有可能面試中會問到的一個小知識點(diǎn)。

在 Flask 框架中,我們通常使用下面的代碼來進(jìn)行項目的啟動:

如何真正理解 if name 的作用

上面的代碼是官方給出來的一段最快啟動的小 demo。不難發(fā)現(xiàn),在官方定義的代碼中,入口函數(shù)把 app.run() 放在了if __name__ == '__main__'里。

但是有沒有想過為什么要放在里面呢?

正常開發(fā)情況下調(diào)用 app.run() 啟動,使用的 web 服務(wù)器是 Flask 自帶的一個簡單內(nèi)置服務(wù)器。

對于生產(chǎn)環(huán)境而言,啟動一個 Flask 項目是不能直接通過 Python 去運(yùn)行的,因為還面臨著很多問題,比如并發(fā)性不好,無法監(jiān)控項目各指標(biāo)等。。。

所以在正式的生產(chǎn)環(huán)境中,我們是不會使用 Flask 自帶的服務(wù)器的,而是通過 nginx + uwsgi 來部署項目。nginx 作為前置服務(wù)器,用來接收瀏覽器發(fā)來的請求,接著會把請求轉(zhuǎn)發(fā)給 uwsgi ,uwsgi 會以配置文件的形式加載我們寫好的項目,而加載入口則是本地開發(fā)環(huán)境下的 app.run() 方法所在的入口模塊。就像下圖:

如何真正理解 if name 的作用

于是,在生產(chǎn)環(huán)境下, app.run() 所在的模塊相對于 uwsgi 來說便不是入口文件了,它是需要被導(dǎo)入到 uwsgi 中的一個普通模塊。使用if __name__ == '__main__'?的用途就是,不讓 app.run()進(jìn)行啟動。也就是禁止所謂 Flask 自帶的服務(wù)器啟動。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁題目:如何真正理解ifname的作用-創(chuàng)新互聯(lián)
瀏覽地址:http://muchs.cn/article42/dooiec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)靜態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化網(wǎng)站導(dǎo)航、域名注冊網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)