有關文件導入:
- 一個獨立的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()
所以我們也要按照這樣的格式來開發代碼