運行 more 主程 python代碼 理解 copy 復用 def ble

在很多Python代碼中,在代碼的最下方會看到 if __name__ == ‘__main__‘:,這段代碼到底有什麽用呢?

在理解這個語句的作用前,需要知道的是,一般的Python文件後綴為.py,其可以拿來執行,也可以用來作為模塊使用import導入。當Python解析器讀取一個源文件時它會執行所有的代碼。在執行代碼前會定義一些特殊的變量。如果解析器運行的模塊(源文件)作為主程序,它將會把__name__變量設置成”__main__”。如果只是引入其他的模塊,__name__變量將會設置成模塊的名字,模塊__name__ 的值通常為模塊文件名,不帶路徑或者文件擴展名。

在代碼下方添加 if __name__ == ‘__main__‘: 的主要原因是有時你需要你寫的模塊既可以直接的執行,還可以被當做模塊導入到其他模塊中去.通過檢查是不是主函數,可以讓你的代碼只在它作為主程序運行時執行,而當其他人調用你的模塊中的函數的時候不必執行。

簡單來說就是,方便我們代碼復用,也可以測試模塊。

舉例說明:

創建一個using_name.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

print(__name__)

直接執行輸出:

python using_name.py
__main__    #變成__main__

導入模塊後:

(py3) smallmars:day6 hexin$ python
Python 3.5.3 (default, Apr 23 2017, 10:52:19)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import using_name
using_name      #變成模塊名字
>>>

修改using_name.py

if __name__ == __main__:
    print(run  itself)
else:
    print(imported from another module)

直接執行輸出

python using_name.py
run itself

導入模塊方式

(py3) smallmars:day6 hexin$ python
Python 3.5.3 (default, Apr 23 2017, 10:52:19)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import using_name
imported from another module    #執行else內容
>>>

【Python中if __name__ == '__main__': 的解析】