if __name__ == '__main__的理解
阿新 • • 發佈:2018-06-25
右鍵 完成 div 不能 介紹 int 模塊導入 功能 條件 模塊之間引用不能循環成環,圓圈
模塊的收搜
!!!把模塊當作腳本執行
什麽叫模塊:py文件,如果一個py文件被導入了,他就是一個模塊,
模塊沒有具體的調用過程
但是能對外提供功能
什麽叫腳本:py文件,如果這個py文件直接被執行,這個被直接執行的文件就是一個腳本(點擊右鍵運行這個py文件)
前提介紹:py文件叫login,文件內的函數叫log_in
當一個py文件(名字叫Login.py)當作腳本執行的時候,能夠獨立完成登錄功能
print(‘__name__:‘, repr(__name__))
返回:__name__: ‘__main__‘
結論:當一個py文件被當作腳本執行的時候,__name__是一個字符串數據類型的‘__main__‘。即__name__等於‘__main__‘這個py文件本身,被當作腳本,可以這樣去理解
當一個py文件定義成模塊的時候(login模塊名)被當導入的時候需要等待調用才能完成功能
import login
login.log_in
__name__: ‘login‘
結論:當一個py文件被當作模塊被導入的時候,__name__是一個字符串數據類型的模塊名。即
__name__等於 ‘login‘這個模塊名,被當作模塊,可以這樣理解
問題?就是說在一個py文件裏,怎麽控制他當作腳本執行的時候,他去執行他裏面的函數調用,而同時這個py文件被當做模塊被調用的時候,不執行倆次(因為被當作腳本執行時,函數有調用才能被執行嘛,如果被當作模塊導入時就會被打印倆次。)
說白了就是去加個開關去判斷他是被當作腳本執行呢還是被當作模塊導入。怎麽做?
所以就可以這樣去判斷:
在這個login.py文件裏:
內容如下:
def log_in:
print(‘我是腳本文件‘)
if __name__ == ‘__main__‘:#這用法是固定的
log_in()
老師總結:
只要當前這個文件直接被執行,就會執行if條件語句內的代碼
當前這個文件是引入模塊的時候被執行,就不會執行if條件內語句內的代碼。
#意思是說:__name__等於__main__這個py文件本身的時候,我就走下面的log_in()然後就執行。
#這樣就可以控制Login這個py文件被當作模塊被導入時,不會打印倆次。其實可以簡單理解為__name__和__main__就是這個文件名,如果文件名等於文件,就當作腳本執行,就執行這個py文件打印調用結果,如果這個文件名等於這個模塊名的時候就不去執行模塊內的調用,就是說當作模塊時不被調用倆次,你想調用模塊的函數要自己手動調,而不是直接就全部將模塊內的東西直接調用過來就打印結果了。
if __name__ == '__main__的理解