【Python中if __name__ == '__main__': 的解析】
阿新 • • 發佈:2017-06-09
運行 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__': 的解析】