#示例代码基于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(),从上而下顺序执行。 |
|