一个实例告诉你Python中关于 if __name__ == ‘__main__‘ 有何作用
生活随笔
收集整理的這篇文章主要介紹了
一个实例告诉你Python中关于 if __name__ == ‘__main__‘ 有何作用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 正文
- .py源文件
- 實例現象
- 運行原理
前言
相信大部分開發者對于“程序入口”這個概念并不陌生。對于很多編程語言來說,程序都必須要有一個入口,比如既保留C語言面向過程思想又有面向對象思想的語言C++等,以及完全面向對象的編程語言Java、C#等,都需要一個main函數作為程序的入口,也就是程序的運行會從main函數開始。Java、C#中都必須要有一個包含main方法的主類作為程序的入口。但python不同,它屬于腳本語言,不像編譯型語言那樣先將程序編譯為二進制文件再運行,而是動態逐行解釋運行,也就是從腳本第一行開始運行,沒有統一的入口 。
正文
.py源文件
一個Python源文件(.py)除了可以直接運行外,還可以作為模塊(也就是庫),被其他.py文件導入。不管是直接運行還是被導入,.py文件的最頂層代碼都會被運行(Python用縮進來區分代碼的層次)。而當作為模塊被導入時,我們可能只希望被導入文件中一部分代碼被運行。
實例現象
1. 假設現在有一個存儲常量圓周率Π的源文件constNum.py,里面只有一個打印常量的方法: PI=3.1415926535def main():print("Π的值為:",PI)main() 執行結果:
2、還有一個是計算圓面積的源文件calculateArea.py,這個文件需要導入上面文件,僅使用里面的常量Π:
上面實例中,計算圓面積的源文件僅導入了常量Π,并沒有想使用常量文件中的方法,而程序實際的執行結果可以看到,它把包含Π常量的文件中的方法也執行了。這并不滿足需求。(實際需求是僅使用常量Π,不使用打印常量的方法,最終執行結果只打印出面積)。
3、現在,我們對constNum.py文件進行修改,增加“if __name__ == '__main__':”,把自定義的打印方法寫在這個方法里面: PI=3.1415926535def main():print("Π的值為:",PI)if __name__ == '__main__':main() 再次運行計算圓面積源文件,輸出結果為:增加 “ if name == ‘main’: ”后,可以看到輸出結果就是我們實際需求中的樣子了。
運行原理
前面說到一個.py文件的作用:①可以直接作為腳本執行;②import到其他的python腳本中被調用執行。“ if __name__ == '__main__': ”的作用就是控制這兩種情況執行代碼的過程。在“ if __name__ == '__main__': ” 下的代碼只有在第一種情況下(該文件作為腳本直接執行)才會被執行,而import到其他腳本中是不會被執行的。
每個python模塊(.py文件)都包含內置的變量_name_,當模塊運行的時候,_name_等于文件 名(包含了后綴.py)。如果import到其他模塊中,則_name_等于模塊名(不包含后綴.py)。而“_main_”等于當前執行文件的名稱(包含了后綴.py)。所以,當模塊被直接執行時,__name__ == '__main__ 結果為true,就執行對應的方法;而當模塊被import到其他模塊時,__name__ == '__main__結果為false,就不調用對應的方法。
總結
以上是生活随笔為你收集整理的一个实例告诉你Python中关于 if __name__ == ‘__main__‘ 有何作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Anaconda 的安装、环境变量配置及
- 下一篇: from import 导入时找不到mo