python 內置函數__name__的作用


(1)背景:在python中每個獨立的python文件,都是一個模塊。在導入文件時,文件中沒有任何縮進的代碼(即主方法)都會被執行一遍。

(2)在實際開發中,開發人員會在主方法中增加一些測試代碼,比如測試一下函數是否正常執行,打印一些日志等。在不作處理的情況下,如果在其它文件中導入該模塊,將會自動執行這些測試代碼,一般這是不允許的。

1 # 文件1
2 # 文件名:測試模塊1.py
3 
4 def say_hello():
5     print("hello world")
6 
7 print("這是測試模塊1")
8 say_hello()
1 # 文件2  導入文件1
2 # 文件名:test.py
3 
4 import 測試模塊1
5 
6 # 不必添加任何代碼,直接運行該文件,控制台會輸出文件1的測試代碼
7 #這是測試模塊1
8 #hello world

(3)此時要解決導入模塊自動執行測試代碼的問題,就輪到主人公"__name__"內置函數的出場了:

  ·作用:__name__ 屬性可以做到,測試模塊的代碼只在測試情況下被運行,而在被導入時不會被執行。

  __name__ 記錄着一個字符串:①當前執行的程序調用__name__ ,返回的字符串是" __main__ ";

                ②如果是被其它文件導入,__name__ 返回的字符串則是導入文件的文件名。

# 文件1
# 文件名:測試模塊1.py

def say_hello():
    print("hello world")

print(__name__)
print("這是測試模塊1")
say_hello()

# 控制台輸出
#__main__
#這是測試模塊1
#hello world
# 文件2  導入文件1
# 文件名:test.py
 
import 測試模塊1

# 不必添加任何代碼,直接運行該文件,控制台會輸出文件1的測試代碼
#測試模塊1
#這是測試模塊1
#hello world

利用 __name__ 的這個屬性,我們可以改造文件1的代碼,解決測試代碼自動執行的問題:

# 文件1
# 文件名:測試模塊1.py

def say_hello():
    print("hello world")

if __name__ == "__main__":
    print(__name__)
    print("這是測試模塊1")
    say_hello()

再次執行文件2,控制台就不會有測試代碼的輸出了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM