http://codingpy.com/article/python-import-101/

https://segmentfault.com/a/1190000009842139

(一)Python模块前面from…import…的初始化方式

刘江的博客:

http://www.liujiangblog.com/course/python/26

实际场景:

main.py初始化EasyLog与svc.py初始化EasyLog:

from biz.t14.t14_auto_svc import T14AutoSvc ###先执行这个(会到

T14AutoSvc类脚本里面,将from及class外层定义的全局变量

EasyLog()

初始化;)

from common.helper.log_helper import EasyLog

from conf.config import Config

if name == ‘main’:

#sftp连接到正式

Config.instance().set_all_io_release()

EasyLog().set_t14_log_config() ###改变了全局变量的属性值;;;

t14_auto_svc = T14AutoSvc() #在已有的全局变量基础上,进行操作;

t14_auto_svc.send_data()

(二)执行顺序

虽然我们有各种流程判断、循环、跳转、控制、中断等等,但从根本上程序还是逐行顺序执行的。

Python代码在执行过程中,遵循下面的基本原则(可参考计算机系统相关知识理解):

普通语句,直接执行;

碰到函数,将函数体载入内存,并不直接执行

碰到类,执行类内部的普通语句,但是类的方法只载入,不执行

碰到if、for等控制语句,按相应控制流程执行

碰到@,break,continue等,按规定语法执行

碰到函数、方法调用等,转而执行函数内部代码,执行完毕继续执行原有顺序代码

内置模块if name=='main’

在一个py程序中,经常会看到if name==‘main’;其中__name__本身是一个内置模块,py文件通常有两大类执行方式,要么是直接运行,比如直接在IDE窗口中点run或者Python 目标.py;要么是被调用运行;在直接运行的时候,该程序的内置属性__name__的值就会是__main__;但py文件作为被调用的对象的时候,该值就不为__main__;

Python test.py的执行顺序

import os # 1

print(' time module start') # 2

class ClassOne():

print(' ClassOne body') # 3

def __init__(self): # 10

print(' ClassOne.__init__')

def __del__(self):

print(' ClassOne.__del__') # 101

def method_x(self): # 12

print(' ClassOne.method_x')

class ClassTwo(object):

print(' ClassTwo body') # 4

class ClassThree():

print(' ClassThree body') # 5

def method_y(self): # 16

print(' ClassThree.method_y')

class ClassFour(ClassThree):

print(' ClassFour body') # 6

def func():

print(" function func")

if __name__ == '__main__': # 7

print(' ClassOne tests', 30 * '.') # 8

one = ClassOne() # 9

one.method_x() # 11

print(' ClassThree tests', 30 * '.') # 13

three = ClassThree() # 14

three.method_y() # 15

print(' ClassFour tests', 30 * '.') # 17

four = ClassFour()

four.method_y()

print(' evaltime module end') # 100

首先执行#1的import语句

执行#2的打印语句

ClassOne、ClassThree和ClassFour的类定义执行过程中,分别打印#3、#4、#5、#6四句话,但是其中的方法并不执行,仅仅是载入内存

碰到#7的if name == ‘main’:,判断为True,于是执行if内部的代码

执行#8的print语句

执行#9,实例化一个ClassOne的对象

执行#10的初始化方法,打印一条语句

返回执行#11的menthod_x调用

返回类的定义体,找到#12,执行方法,打印语句

再返回#13处,打印

执行#14的实例化

ClassThree没有自定义初始化方法,接着执行#15

回到类里找到#16的方法,执行打印语句

执行#17

…后面不再详述

执行完最后的#100的打印语句后,按理说程序应该终止退出了,但由于ClassOne这个类定义了__del__方法,还要在最后执行它内部的代码#101这条打印语句。

通过这个例子,相信你对Python的程序执行流程能够有一定的了解。其实这个过程,也是我们读别人代码的过程。

总结:

对于一个Python程序,首先执行的是import程序,特别地,如果import了别的包,那么会跳入到别的包模块进行初始化过程(上述的判断__name__之前的那一部分);初始化通常包含:import的语句执行。还有类的定义执行,非__init__()部分,类的方法不真正执行,只是会载入内存;但当真正初始化一个类实例之后,才会执行def init():

参考:http://www.liujiangblog.com/course/python/26

python导包顺序_2019-03-21 python导入包以及Python程序执行顺序理解相关推荐

  1. 【Intellij IDEA教程】怎么自动清除无效的import导入包、清除无效的import导入包的快捷键

    [Intellij IDEA教程]怎么自动清除无效的import导入包.清除无效的import导入包的快捷键 通常在使用Intellij IDEA进行项目开发的时候 Intellij IDEA会自动帮 ...

  2. Java实例化后自动执行_Java的实例化顺序(程序执行顺序)

    加载/执行顺序: 牢记一点: 静态和非静态分开处理 使用到静态加载时,静态又分为: 静态变量, 静态代码块, 其中加载顺序是按照类中书写的先后顺序加载的 非静态加载顺序: 按照非静态书写顺序加载/执行 ...

  3. GO函数内部程序执行顺序

    目录 GO 包 标准库 程序执行顺序 GO 包 包是结构化代码的一种方式:每个程序都由包(通常简称为pkg)的概念组成,可以使用自身的包或者从其它包中 导入内容. 如同其它一些编程语 言中的类库或命名 ...

  4. 学习MFC首先要知道的--程序执行顺序

    MFC的程序执行顺序 很多刚学MFC的人都会被MFC给弄的晕头转向.以前传统的C语言中的main()不见了,window sdk api 中的WinMain()函数也不见了,到底用MFC编写的程序是如 ...

  5. Python程序执行顺序

    #示例代码基于py3.6 一直对Python程序的执行顺序有些疑惑,例如python程序是顺序执行的,那怎么还有main函数的出现呢? 在查阅了资料后,参见这里后,算是有点明白了: 1.python程 ...

  6. 【笔记】Python 列表推导式(表达式 for 变量 in 列表 if 表达式 ) 执行顺序

    列表推导式用于使用其他列表创建一个新列表. 一般形式:中括号内含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句. [表达式 for 变量 in 列表 if 表达式] ...

  7. python函数执行顺序_python下for循环接if判断的函数执行顺序

    如题,程序第4行开始,for循环接if判断,之后的name=self._nic_ovs_name_pattern.search(o) 指的是if条件判断返回true才执行赋值操作吗?还是if返回Fal ...

  8. python对应的岗位_隐式相对导入如何在Python中工作?

    包是具有__init__.py文件的目录,是,并且在模块搜索路径上找到时作为模块加载.因此,如果父目录位于模块搜索路径上,则pkg只是一个可以导入并视为包的包. 但是通过将pkg / core / m ...

  9. 进击谷歌:多线程下程序执行顺序怎么稳定不乱?

    面试官您好,我是来面试的 您好,我是这次的面试官,先介绍一下自己把 我是女孩,blala .... 那问一个多线程的问题吧,在一个多线程的环境中,怎么能保证一系列方法的执行顺序呢? 01 PART 题 ...

最新文章

  1. vs2008 试用版评估期结束的解决方法(2009-08-
  2. Python学习网络爬虫--转
  3. mfc调取摄像头显示并截图_前摄后录,让行车安全再次提升:70迈智能后视镜后摄像头体验...
  4. 深圳内推 | 华为诺亚方舟实验室招聘机器学习/深度学习算法实习生
  5. Err.number错误号和错误说明(一)
  6. 【java学习之路】(java框架)010.声明式事务控制
  7. 京东笔试题:如何实现 MySQL 删除重复记录并且只保留一条?
  8. 51单片机通过WIFI模块ESP8266控制LED灯(大致内容,经过测试成功实现)
  9. 网站打开速度慢如何压缩图片_8个免费实用的图片压缩网站、软件(含下载地址)吐血推荐...
  10. Java中get和set的作用、用法
  11. 把Date类型的Fri Feb 01 00:00:00 CST 2019转换成yyyy-MM-dd格式
  12. MATLAB学习笔记之矩阵和数组1.1(mathematic)
  13. 送戒指创意 让婚礼不再单调
  14. 斐波那契数列——《剑指offer》
  15. #html#画哆啦a梦
  16. 达梦数据库表新增字段速度测试
  17. svn主从备份以及开机启动脚本
  18. android广告平台介绍
  19. 用Python制作登录界面
  20. stata软件不出图_绘制回归分析结果的森林图,R和Stata软件学起来!

热门文章

  1. vs 设置调试路径为exe所在的路径
  2. c++析构相关-待看
  3. mysql创建与更新时间字段
  4. 乐安全 支持x86_国产EDA又进一步!芯华章发布全新仿真技术:x86、ARM等架构通吃...
  5. php类实例方法静态方法,PHP类中的静态方法使用实例
  6. 自考微型计算机原理与接口技术试卷,200204自考微型计算机原理与接口技术试题.doc...
  7. android fragment概念,android Fragment相关概念简介
  8. java过滤器命名_java--FilenameFilter文件过滤器
  9. linux下设置mysql不区分大小写
  10. 2016年我国研究的超级计算机,盘点2016:我国科研取得的重大成果