Python程序运行原理图文解析
作者:ITxiaoke 发布时间:2023-08-09 03:27:31
本文研究的主要是Python程序运行原理,具体介绍如下。
编译型语言(C语言为例)
动态型语言
一个程序是如何运行起来的?比如下面的代码
#othermodule.py
def add(a, b):
return a + b
#mainrun.py
import othermodule
a = ['xiaoke', 1, 'python']
a = 'xiaoke string'
def func():
a = -5
b = 257
print(a + b)
print(a)
if __name__ == '__main__':
func()
res = othermodule.add(1, 2)
print(res)
分析
dir 函数
Python 的内置函数 dir 可以用来查看一个命名空间下的所有名字符号。一个用处是查看一个命名空间的所有属性和方法(这里的命名空间就是指类、函数、module)。
比如,查看当前的命名空间,可以使用 dir(),查看 sys 模块,可以使用 dir(sys)
def 指令
def func(),在字节码指令中就是 MAKE_FUNCTION。
Python 是动态语言,def 实际上是执行一条指令,用来创建函数
(class 则是创建类的指令),而不仅仅是个语法关键字。
函数并不是事先创建好的,而是执行到的时候才创建的。
def func() 将会创建一个名称为 func 的函数对象。
实际上是先创建一个函数对象,然后将 func 这个名称符号绑定到这个函数上。
pyc文件
pyc 文件是 PyCodeObject 对象在硬盘上的表现形式。生成pyc文件:
python -m py_compile xx_module.py
pyc文件三大作用
创建时间,py文件比pyc文件新,则从新生成pyc
magic num做运行前版本检测,版本不同从新生成pyc
PyCodeObject 对象
在运行期间,编译结果也就是 PyCodeObject 对象,只会存在于内存中,而当这个模块的 Python 代码执行完后,就会将编译结果保存到了 pyc 文件中,这样下次就不用编译,直接加载到内存中。
这个 PyCodeObject 对象包含了 Python 源代码中的字符串,常量值,以及通过语法解析后编译生成的字节码指令。PyCodeObject 对象还会存储这些字节码指令与原始代码行号的对应关系,这样当出现异常时,就能指明位于哪一行的代码。
import 指令
import 指令是用来载入 module 的,如果需要,也会顺道做编译的事。但 import 指令,还会做一件重要的事情就是把 import 的那个 module 的代码执行一遍,这件事情很重要。
Python 是解释执行的,连函数都是执行的时候才创建的。如果不把那个 module 的代码执行一遍,那么 module 里面的函数都没法创建,更别提去调用这些函数了。
执行代码的另外一个重要作用,就是在这个 module 的命名空间中,创建模块内定义的函数和各种对象的符号名称(也就是变量名),并将其绑定到对象上,这样其他 module 才能通过变量名来引用这些对象。
Python 虚拟机还会将已经 import 过的 module 缓存起来,放到一个全局 module 集合 sys.modules 中。
这样做有一个好处,即如果程序的在另一个地方再次 import 这个模块,Python 虚拟机只需要将全局 module 集合中缓存的那个 module 对象返回即可。
来源:http://blog.csdn.net/u014745194/article/details/73392162


猜你喜欢
- 前言众所周知在Python 中常用的数据类型bool(布尔)类型的实例对象(值)就两个,真和假,分别用True和False表示。在if 条件
- 最近在处理词向量这块,因为平时习惯把处理的词向量保存成文件,但是txt文件读取出来的都是string格式的数字,有必要转成float型上网查
- 本文借鉴于张广河教授主编的《数据结构》,对其中的代码进行了完善。从某源点到其余各顶点的最短路径Dijkstra算法可用于求解图中某源点到其余
- 如果想读取用 open() 函数打开的文件中的内容,除了可以使用 read() 函数,还可以使用 readline() 和 readline
- 如下所示:import numpy as npfrom torchvision.transforms import Compose, ToT
- 前言老早就看到新闻员工通过人脸识别监控老板来摸鱼。有时候摸鱼太入迷了,经常在上班时间玩其他的东西被老板看到。自从在咸鱼上淘了一个树莓派3b,
- 前言Exception类是常用的异常类,该类包括StandardError,StopIteration, GeneratorExit, Wa
- 先看一下flask-login模块的整体架构基础的信息和全局配置这里就不多说,需要用到再斟酌也可以的。这里也是针对每个模块较为常用的进行解释
- mysql数据库开机报错: InnoDB: The log sequence number in ibdata files does not
- 如下所示:# -*- coding: utf-8 -*-import base64with open("C:\\Users\\us
- 技术栈win7+python3+selenium之前有个需求需要实现自动化提流程,为了在任何电脑都能实现该功能,特此写了个爬虫,并将其打包成
- 特点python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置
- 本文实例讲述了PHP实现的随机IP函数。分享给大家供大家参考,具体如下:function get_rand_ip(){ $arr
- 流动网页设计有很多好处,但也只有在正确使用的时候。合适的技巧会使页面在大屏幕、小屏幕抑、PDA小屏幕上都能得到良好的呈现。但是,糟糕的代码结
- DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在
- 目录实例001:数字组合实例002:“个税计算”实例003:完全平方数实例004:这天第几天实例005:三数排序实例006:斐波那契数列实例
- 学习Python的过程中,我们会遇到Excel的读写问题。这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Exc
- 项目技术:webpack + vue + element + axois (vue-resource) + less-loader+ ...
- 为了方便各位朋友,本文收集了一些对Web开发人员非常有用的手册,记得推荐一下哦。HTML 速查手册HTML/XTML in one page
- 最近发现Python课器做很多事情,在监控服务器有其独特的优势,耗费资源少,开发周期短。首先我们做一个定时或者实时脚本timedtask.p