沙门空海 / 待分类 / Python程序执行顺序

0 0

   

Python程序执行顺序

2018-09-14  沙门空海

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多