|
#示例代碼基于py3.6 一直對Python程序的執(zhí)行順序有些疑惑,例如python程序是順序執(zhí)行的,那怎么還有main函數(shù)的出現(xiàn)呢? 1.python程序是順序執(zhí)行的,而C++中main()是程序的入口 例如以下代碼,結(jié)果如注釋所示,這里雖然有個main函數(shù),但是最先輸出的不是“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.總結(jié) C++中一main函數(shù)為執(zhí)行的起點;Python中首先執(zhí)行最先出現(xiàn)的非函數(shù)定義和非類定義的沒有縮進的代碼,如示例一之中的第一行 一份程序為了區(qū)分主動執(zhí)行還是被調(diào)用,Python引入了變量__name__,當文件是被調(diào)用時,__name__的值為模塊名,當文件被執(zhí)行時,__name__為'__main__' 所以會經(jīng)常看到別人的代碼這么寫,同時也是典型的python文件結(jié)構(gòu): 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) 函數(shù)定義(若有) 15 if __name__ == '__main__':16 main() 若是文件主動執(zhí)行了,則最好寫成跟上面的例子一樣,main之前不要有可執(zhí)行代碼,這樣做到程序從main()開始,流程邏輯性強 若是文件作為模塊被調(diào)用,則可以不用寫main(),從上而下順序執(zhí)行。 |
|
|