__name__
和__main__
認識
作用:一般用於測試程序的功能,if __name__ == '__main__':
下面的代碼會被執行,但當前.py
文件被當做模塊導入的時候,main下面的代碼就不會被執行,防止測試代碼被執行。
語法:
if __name__ == '__main__':
要執行的測試模塊
if __name__ == "__main__":
可以看成是python程序的入口,就像java
中的main()方法,但不完全正確。
在.py
文件中,除了def后面定義函數外的代碼都會被認為是“main”方法中的內容,從而從上而下執行。
如果只是寫一個print('hello world'),那這一句話就是一個程序,因此不需要所謂的"main"方法入口,直接運行測試就可以。
但如果是測試函數功能,我們就需要在.py
文件中寫上if__name__=="__main__"
,再調用函數,當然,如果你不寫的話,也沒關系,也可以直接將函數加括號進行調用。
我們寫的目的就是防止后面會把當前.py
文件當做模塊導入其他.py
文件中,從而誤觸發測試代碼。
__name__
的變化
1、__name__
其實就是一個內置屬性,在自己的py文件中被執行,__name__
屬性的值就是__main__
:
示例代碼:
# test.py
print("first")
def say_hello():
print(__name__)
if __name__ == '__main__':
print(__name__)
say_hello()
運行結果:
first
__main__
__main__
2、將test.py
文件導入其他文件中,__name__
就會變為當前模塊的名字,例如:__test__
。
實例代碼:
# work.py
import test # 導入test
if __name__ == '__main__':
test.say_hello()
print(__name__)
執行結果:
first
test
__main__
總結:python不像JAVA中一樣擁有main()方法的特點。所謂的入口其實也就是一個if條件語句,判斷成功就執行下面if中的代碼。JAVA等其他語言中會有特定的內置函數去識別main()方法入口,在main()方法中從上而下執行。