在本教程中,我們將學(xué)習(xí)如何使用Python程序的__name__屬性在不同的上下文中動態(tài)運行它。
一些編程語言有一個稱為的特殊函數(shù)main(),它是程序文件的執(zhí)行點。但是,Python解釋器從文件頂部開始依次運行每一行,并且沒有顯式main()函數(shù)。
Python提供了其他約定來定義執(zhí)行點。其中之一是使用python文件的main()函數(shù)和__name__屬性。
__name__變量是一個特殊的內(nèi)置Python變量,它顯示當(dāng)前模塊的名稱。
根據(jù)執(zhí)行Python文件的位置,它具有不同的值。讓我們來看一個實例。
假設(shè)我們有一個名為helloworld.py的Python文件,其內(nèi)容如下:
print(__name__)
如果我們從命令行運行helloworld.py,則它將作為Python腳本運行。我們可以使用以下命令運行Python程序:
python helloworld.py
def foo(): str="__main__" print(str); if __name__=="__main__": foo()
當(dāng)我們將程序作為腳本運行時,變量的值__name__設(shè)置為__main__。因此,以下程序的輸出將是:
__main__
我們還可以將Python文件作為模塊運行。為此,我們必須將此文件導(dǎo)入另一個Python程序。讓我們來看一個實例。
假設(shè)我們在與heloworld.py文件相同的目錄中有一個名為main.py的Python 文件。它具有以下內(nèi)容:
import helloworld
運行此文件時,將具有以下輸出:
helloworld
在這里,我們可以看到導(dǎo)入模塊也會運行模塊文件中的所有代碼。
但是,我們可以看到,而不是顯示 __main__,程序?qū)@示模塊的名稱,即 helloworld。
這是因為,在將Python文件作為模塊運行的情況下,模塊本身的名稱已分配給__name__變量。
現(xiàn)在我們已經(jīng)了解了__name__變量是如何分配值的,我們可以使用if條件子句在不同的上下文中,以不同的方式運行相同的Python文件。
讓我們來看一個實例。
假設(shè)我們將helloworld.py文件的內(nèi)容更改為以下內(nèi)容:
def main(): print("Hello World") if __name__=="__main__": main()
現(xiàn)在,當(dāng)我們通過命令行將其作為腳本運行時,輸出將是:
Hello World
但是,當(dāng)我們通過將其導(dǎo)入main.py文件將其作為模塊運行時,由于main()未調(diào)用該函數(shù),因此不會顯示任何輸出。
在這里,我們在helloworld.py文件中創(chuàng)建了一個自定義main()函數(shù)。它只在程序作為獨立腳本而不是作為導(dǎo)入模塊運行時執(zhí)行。
這是在Python中顯式定義main()函數(shù)的標(biāo)準(zhǔn)方法。 它是Python文件__name__變量的最流行用例之一。