欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Python中的if __name__ == __main__詳情

 更新時間:2021年09月15日 11:00:49   作者:錢魏Way  
在學(xué)習(xí)Python的過程中發(fā)現(xiàn)即使把if __name__ == ‘__main__’ 去掉,程序還是照樣運(yùn)行。很多小伙伴只知道是這么用的,也沒有深究具體的作用。這篇文字就來介紹一下Python中的if __name__ == ‘__main__’的作用,需要的朋友參考下文

關(guān)于在學(xué)習(xí)Python的過程中,遇到的這類似的代碼:

if __name__ == "__main__":
    print("Hello World!")

1.程序入口

對于很多編程語言來說,程序都必須要有一個入口,比如 C,C++,以及完全面向?qū)ο蟮木幊陶Z言 Java,C# 等。如果你接觸過這些語言,對于程序入口這個概念應(yīng)該很好理解,C 和 C++ 都需要有一個 main 函數(shù)來作為程序的入口,也就是程序的運(yùn)行會從 main 函數(shù)開始。同樣,Java C# 必須要有一個包含 Main 方法的主類來作為程序入口。

Python 則有不同,它屬于腳本語言,不像編譯型語言那樣先將程序編譯成二進(jìn)制再運(yùn)行,而是動態(tài)的逐行解釋運(yùn)行。也就是從腳本第一行開始運(yùn)行,沒有統(tǒng)一的入口。

if __name__ == “__main__”: 本質(zhì)就是一個if判斷,但它又不是一個簡單的if判斷。即當(dāng).py文件運(yùn)行時,__name__ 是'__main__' 時運(yùn)行下面if下的代碼,則否不運(yùn)行。當(dāng)然你也可以把代碼寫成這樣:

if __name__ == "__main__":
    print("Hello World!")
else:
    print("Hello Mars!")


2.__name__是什么?

__name__Python內(nèi)置的變量,它是每個 Python 模塊必備的屬性,但它的值取決于你是如何執(zhí)行這段代碼的。

當(dāng)你直接執(zhí)行一段腳本的時候,這段腳本的 __name__變量等于 ‘__main__'
當(dāng)這段腳本被導(dǎo)入其他程序的時候,__name__ 變量等于腳本本身的名字

場景1:直接運(yùn)行腳本

假設(shè)我們有一個nameScript.py,代碼如下:

def myFunction():
    print('The value of __name__ is ' + __name__)


def main():
    myFunction()


if __name__ == '__main__':
    main()

直接執(zhí)行這個文件后流程為:

在所有其他代碼執(zhí)行之前,__name__變量就被設(shè)置為 ‘__main__' 了。在此之后,通過執(zhí)行 def 語句,函數(shù) main() 和 myFunction() 的本體被載入。接著,因為這個 if 語句后面的表達(dá)式為真 true,函數(shù) main() 就被調(diào)用了。而 main() 函數(shù)又調(diào)用了myFunction(),打印出變量的值'__main__'。

場景2:從其他腳本導(dǎo)入

如果你需要在其他腳本里重用這個 myFunction() 函數(shù),比如在 importingScript.py 里,我們可以將 nameScript.py 作為一個模組導(dǎo)入。

importingScript.py 的內(nèi)容如下:

import nameScript as ns

ns.myFunction()

這時,我們就有了兩個不同的作用域:一個是 importingScript 的,一個是 nameScript 的:

importingScript.py ,__name__ 變量就被設(shè)置為 ‘__main__'。當(dāng)導(dǎo)入 nameScript 的時候,Python 就在本地和環(huán)境變量 PATH 指向的路徑中尋找對應(yīng)名稱的 .py 文件,找到之后,將會運(yùn)行導(dǎo)入的文件中的代碼。

但這一次,在導(dǎo)入的時候,它自身的 __name__ 變量就被設(shè)置為了 ‘nameScript',接下來還是一樣,函數(shù) main() myFunction() 的本體被載入。然而,這一次 if 語句后面的表達(dá)式結(jié)果為假 false,所以 main() 函數(shù)沒有被調(diào)用。

導(dǎo)入完畢之后,回到 importingScript.py 中。現(xiàn)在 nameScript 模塊中的函數(shù)定義已經(jīng)被導(dǎo)入到當(dāng)前的作用域中,于是我們通過 ns.myFunction() 的方式調(diào)用模塊中的函數(shù),這個函數(shù)返回的是模塊內(nèi)的變量的值 ‘nameScript'。

如果你試著在 importingScript 中打印 __name__ 變量的值,那當(dāng)你直接執(zhí)行 importingScript 的時候,它也會輸出 ‘__main__'。原因在于,這個變量是在 importingScript 的作用域中的。

3.__name__可以顯示包路徑

我們建立這樣一個目錄結(jié)構(gòu):

a
├── b
│   ├── c.py
│   └── __init__.py
└── __init__.py
d.py


c.py文件中的代碼:

print(__name__)


d.py文件中的代碼:

from a.b import c


運(yùn)行d.py文件,結(jié)果為:

a.b.c

此時a.py文件的__name__屬性變成了a.b.c,完完全全反映了它所在的包路徑。

5.測試模塊里函數(shù)

由于一個腳本被引入時,自身的代碼會被執(zhí)行,因此我們在每個腳本里都寫上一段if __name__ == ‘__main__': 如果你希望一些代碼只有在腳本被直接執(zhí)行時才執(zhí)行,那么就把這些代碼放入到if 語句塊中,最常見的情形就是測試代碼:

def safe_division(a, b):
    if b == 0:
        return None

    return a/b

if __name__ == '__main__':
    print(safe_division(10, 5) == 2)
    print(safe_division(10, 0) == None)

我們寫完一個函數(shù)后,不免要寫一些測試的代碼,而這些測試的代碼我們不希望他們在引入時執(zhí)行,只有當(dāng)我們主動執(zhí)行進(jìn)行測試才執(zhí)行這些測試代碼。

到此這篇關(guān)于關(guān)于Python中的if __name__ == ‘__main__'詳情的文章就介紹到這了,更多相關(guān)Python中的if __name__ == ‘__main__'內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python的進(jìn)程間通信詳解

    Python的進(jìn)程間通信詳解

    大家好,本篇文章主要講的是Python的進(jìn)程間通信詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Python中快速掌握Data Frame的常用操作

    Python中快速掌握Data Frame的常用操作

    這篇文章主要介紹了Python中快速掌握Data Frame的常用操作,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • python模式 工廠模式原理及實例詳解

    python模式 工廠模式原理及實例詳解

    這篇文章主要介紹了python模式 工廠模式原理及實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 小結(jié)Python的反射機(jī)制

    小結(jié)Python的反射機(jī)制

    這篇文章主要介紹了Python的反射機(jī)制,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • 一篇文章帶你搞懂Python類的相關(guān)知識

    一篇文章帶你搞懂Python類的相關(guān)知識

    今天我們要說的是面向?qū)ο蟮暮诵?----類,類能幫我們把復(fù)雜的事情變得有條理,有順序,希望大家通過學(xué)習(xí)類能改善自己的編碼風(fēng)格,使代碼變得更為好看,更加通俗易懂,需要的朋友可以參考下
    2021-05-05
  • 利用Python+Selenium破解春秋航空網(wǎng)滑塊驗證碼的實戰(zhàn)過程

    利用Python+Selenium破解春秋航空網(wǎng)滑塊驗證碼的實戰(zhàn)過程

    本文給大家介紹使用Python+Selenium破解春秋航空網(wǎng)滑塊驗證碼的實戰(zhàn)過程,本文通過圖文實例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-08-08
  • Python教程之成員和身份運(yùn)算符的用法詳解

    Python教程之成員和身份運(yùn)算符的用法詳解

    身份運(yùn)算符是python用來判斷的兩個對象的存儲單元是否相同的一種運(yùn)算符號。Python的成員運(yùn)算符是“是否包含運(yùn)算符”,主要應(yīng)用在字符串或者集合中。本文將通過示例聊聊二者的使用,需要的可以參考一下
    2022-09-09
  • Python3實現(xiàn)發(fā)送郵件和發(fā)送短信驗證碼功能

    Python3實現(xiàn)發(fā)送郵件和發(fā)送短信驗證碼功能

    這篇文章主要介紹了Python3實現(xiàn)發(fā)送郵件和發(fā)送短信驗證碼功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • python掃描proxy并獲取可用代理ip的實例

    python掃描proxy并獲取可用代理ip的實例

    下面小編就為大家?guī)硪黄猵ython掃描proxy并獲取可用代理ip的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • python遞歸下載文件夾下所有文件

    python遞歸下載文件夾下所有文件

    這篇文章主要為大家詳細(xì)介紹了python遞歸下載文件夾下所有文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論