歡迎您光臨本站 註冊首頁

淺析Python

←手機掃碼閱讀     f2h0b53ohn @ 2020-07-08 , reply:0

前言

在我們瀏覽一下 python 文件或者自己寫 python 代碼的時候,時常會在代碼的最後加上這樣的一行代碼

  if __name__ == '__main__':   func_name()

 

那麼這一行代碼有什麼具體的作用呢,不加的話會對我們的結果造成影響嗎?

__name__

首先對於用雙下劃線開頭且結尾的變量,在 Python 中被稱為內置變量,除了 __name__,我們常見的還有 __init____dict__ 等等.那麼有多少內置變量呢?我們可以通過下面在交互界面輸入下面的命令,查看 Python 全部內置變量和內置函數

>>> dir(__builtins__)

結果如下圖:

不同情況下的 __name__ 的值

首先我們需要知道 __name__ 在不同情況下會有不同值,它的值取決於我們是如何執行腳本的.我們可以通過幾個例子感受一下:

Example 0

  # test.py  print(f'__name__ 在 test.py 值為 {__name__}')

 

然後直接執行一下代碼

  $ python test.py

 

然後看一下輸出

  $ python test.py   __name__ 在 test.py 值為 __main__

 

在這個例子中,我們發現 __name__ 的值是 __main__

Example 1

在這個例子中,我們重新創建一個腳本 test1.py 然後我們在 test1.py 中調用 test.py

  # test1.py  import test  print(f'__name__ 在 test1.py 值為 {__name__}')

 

接著執行一下 test1.py,再看一下輸出

  python test1.py   __name__ 在 test.py 值為 test  __name__ 在 test1.py 值為 __main__

 

結果是不是很有意思?整個過程是什麼樣子的呢?簡單的畫了一個圖

什麼時候使用 __name__

有時候,我們用 Python 寫了一個腳本,當我們既希望這個腳本可以單獨運行,同樣希望它可以在其他的腳本中發揮作用. 這個時候就需要考慮使用 __name__ 了. 這裡通過改造上面 Example 1的例子來直觀感受一下

修改一下 test.py 文件

  # test.py  def hello(name):   print(f'Hello,{name}')  if __name__ == '__main__':   hello("test")

 

再修改一下 test1.py 文件

  # test1.py  from test import hello  hello("test1")

 

然後讓我們先嚐試直接運行一下 test.py,很顯然這個時候, if 語句條件滿足,會輸出 Hello,test

  $ python test.py   Hello,test

 

這個時候我們如果運行 test1.py,程序就會輸出 Hello,test1 了

  $ python test1.py   Hello,test1

 

如果我們把 if __name__ == "__main__"test.py 去掉會發生什麼呢?

  $ python test1.py   Hello,test  Hello,test1

 

參考

What does if name == “main”: do?

What's in a (Python's) name?

                      

   


[f2h0b53ohn ] 淺析Python已經有239次圍觀

http://coctec.com/docs/python/shhow-post-241832.html