Python程序執行順序


#示例代碼基於py3.6

一直對Python程序的執行順序有些疑惑,例如python程序是順序執行的,那怎么還有main函數的出現呢?

在查閱了資料后,參見這里后,算是有點明白了:

1.python程序是順序執行的,而C++中main()是程序的入口

例如以下代碼,結果如注釋所示,這里雖然有個main函數,但是最先輸出的不是“main”而是“test1”:

 1 #test1
 2 print ("test1")
 3 def Fun():
 4     print ("Fun")
 5 def main():
 6     print ("main")
 7     Fun()
 8 if __name__ == '__main__':
 9     main()
10 '''
11 test1
12 main
13 Fun
14 '''

2.一段python程序以py文件運行時,文件屬性__name__為main;作為模塊導入時,文件屬性__name__為文件名:

 1 #test.py
 2 def Fun():
 3     print ("Fun")
 4 if __name__ == '__main__':
 5     print ("main")
 6     Fun()
 7 '''
 8 main
 9 Fun
10 '''

 

3.總結

C++中一main函數為執行的起點;Python中首先執行最先出現的非函數定義和非類定義的沒有縮進的代碼,如示例一之中的第一行

一份程序為了區分主動執行還是被調用,Python引入了變量__name__,當文件是被調用時,__name__的值為模塊名,當文件被執行時,__name__為'__main__'

所以會經常看到別人的代碼這么寫,同時也是典型的python文件結構:

 1 #/usr/bin/env/ python            #(1) 起始行
 2 #"this is a test module"          #(2) 模塊文檔(文檔字符串)
 3 import sys
 4 import os              #(3) 模塊導入
 5 
 6 debug = True              #(4) (全局)變量定義
 7 class FooClass (object):
 8     'foo class'
 9     pass                           #(5) 類定義(若有) 
10 def main():
11     'test function'
12     foo = FooClass()
13     if debug:
14         print 'ran test()'         #(6) 函數定義(若有) 
15 if __name__ == '__main__':
16     main()

若是文件主動執行了,則最好寫成跟上面的例子一樣,main之前不要有可執行代碼,這樣做到程序從main()開始,流程邏輯性強

若是文件作為模塊被調用,則可以不用寫main(),從上而下順序執行。


免責聲明!

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



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