python的__name__屬性詳解

有關文件導入:

  • 一個獨立的python文件就是一個模塊
  • 在導入文件時,文件中 所有沒有任何縮進的代碼都會被執行一遍
  • 在實際開發中,開發人員通常會在模塊下方增加一些測試代碼,測試代碼是僅在模塊內使用,而被導入到其他文件中不需要執行

這裏就需要知__name__屬性

  • __name__屬性可以做到,測試模塊的代碼只在測試情況下被運行,而在被導入時不會被執行
  • __name__時python的一個內置屬性,記錄着一個字符串
  • 如果是被其他文件導入的,__name__就是模塊名
  • 如果是當前執行的程序,__name____main__

例如:在測試情況下(沒有導入到其他文件中),代碼:

def say_hello():
    print("hello")

print(__name__)

print("我是小米")
say_hello()

運行結果爲:
在這裏插入圖片描述
將其導入到opp_test.py中後,代碼如下:

import opp

print("-" * 50)

運行結果爲:
在這裏插入圖片描述
那要怎麼做才能讓對模塊測試的代碼,只有在執行這個模塊時,纔會被運行???

  • 我們只需要判斷__name__這個屬性,如果__name____main__,就說明我們現在在執行這個模塊
  • 否則,則是在導入到其他文件中

所以我們可以加一條if語句判斷__name____main__,代碼如下:

def say_hello():
    print("hello")


if __name__ == "__main__":
    print(__name__)

    print("我是小米")
    say_hello()

我們運行一下這個模塊,看看能否進行測試,運行結果如下:
在這裏插入圖片描述

可以得出:是可以對該模塊進行測試的

那麼,此時我們再進入到測試導入的文件,再看看導入這個模塊會不會再運行模塊的測試代碼:

import opp

print("-" * 50)

運行結果如下:
在這裏插入圖片描述

可以得出:並不會將模塊測試的代碼執行了

在很多python文件中都會看到一下格式的代碼:

#導入模塊
#定義全局變量
#定義類
#定義函數

#在代碼的最下方
def main():
    #...
    pass

#根據__name__判斷是否執行main代碼
if __name__ == "__main__":
    main()

所以我們也要按照這樣的格式來開發代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章