天天看點

Python的代碼執行順序

初次接觸Python的人會很不習慣Python沒有main主函數。

這裡簡單的介紹一下,在Python中使用main函數的方法

#hello.py
 def foo():
     str="function"
     print(str);
 if __name__=="__main__":
     print("main")
     foo()
 其中if __name__=="__main__":這個程式塊類似與Java和C語言的中main(主)函數
 在Cmd中運作結果
 C:\work\python\divepy>python hello.py
 main
 function
 
  
 在Python Shell中運作結果
 >>> import hello
 >>> hello.foo()
 function
 >>> hello.__name__
 'hello'
 >>>      

可以發現這個内置屬性__name__自動的發生了變化。

這是由于當你以單個檔案運作時,__name__便是__main__

當你以子產品導入使用時,這個屬性便是這個子產品的名字。

在C/C++/​​java​​中,main是程式執行的起點,python中,也有類似的運作機制,但方式卻截然不同:python使用縮進對齊組織代碼的執行,所有沒有縮進的代碼(非函數定義和類定義),都會在載入時自動執行,這些代碼,可以認為是Python的main函數。

每個檔案(子產品)都可以任意寫一些沒有縮進的代碼,并且在載入時自動執行,為了區分主執行檔案還是被調用的檔案,Python引入了一個變量__name__,當檔案是被調用時,__name__的值為子產品名,當檔案被執行時,__name__為'__main__'。這個特性,為​​測試​​驅動開發提供了極好的支援,我們可以在每個子產品中寫上測試代碼,這些測試代碼僅當子產品被Python直接執行時才會運作,代碼和測試完美的結合在一起。

總結:

1).  python 代碼的執行不依賴于 main() 函數;

2).  python 代碼從沒有縮進的代碼開始執行。

例子:
import os,sys
import time
if __name__ == "__main__":
   print("Hello python !!!")
     def func_print():
        print("in func_print")
     def main():
         print("In main")
    main() 
執行結果:
  Hello python !!!
  In mainimport os,sys
import time
   print("Hello python !!!")
   def func_print():
     print("in func_print")
   def main():
     print("In main")
   #main()
  func_print()