首页 > 编程语言 >Python程序运行原理

Python程序运行原理

时间:2023-04-21 14:48:18浏览次数:39  
标签:解释 解释器 字节 程序运行 Python 编译 原理 pyc

Python 是一种解释型语言(先编译后解释语言),不需要编译成可执行文件,而是在运行时逐行解释执行,故运行效率相比C/C++较低。Python 的运行原理可以简单地概括为以下几个步骤:

  1. 词法分析和语法分析:Python 解释器会将源代码进行词法分析,将代码转换为一系列的 Token(即词法单元)。然后,Python 解释器会对 Token 进行语法分析,将代码转换为语法树。
  2. 字节码编译: Python 解释器会将语法树编译成字节码。字节码是一种类似于机器码的中间代码,它比源代码更加容易解释执行。
  3. 解释执行:最后,Python 解释器会逐行解释字节码为机器码,由CPU执行机器码。

 

Python解释器是一个可执行文件(加动态库),可以由Python源码编译得到(使用make install),但是编译和安装 Python 解释器需要一些编译工具和库的支持,例如 gcc 编译器、make 工具、zlib 库、OpenSSL 库、Tkinter 库等。

字节码是一种中间形式,Python 程序不需要在每次执行时都重新编译,pyc的目的是重用,Python解释器认为只有import进来的模块,才是需要被重用的模块。pyc文件每次被载入时,都会检查它的最后修改日期(由PyCodeObject写入到pyc时会写入一个long型的日期),与py文件一致则直接使用,否则重新生成一份pyc文件。

 

  • 编译型语言:任何一个小改动都需要整体重新编译,可以脱离编译环境运行,运行速度快;
  • 解释型语言:改动不需要整体重新编译,不可脱离解释器环境运行,运行速度慢;

 

标签:解释,解释器,字节,程序运行,Python,编译,原理,pyc
From: https://www.cnblogs.com/LuckCoder/p/17340285.html

相关文章

  • Python调用C程序
    1.将C程序编译为动态库;2.python代码加载动态库调用C函数......
  • python8:函数:函数的参数
    函数格式:defname():函数体 函数的参数:必选参数,默认参数[缺省参数](在调用的时候如果未赋值,就会用定义函数是给的默认值)、可选参数、关键字参数参数:其实就是函数为了实现某项特定的功能,进而为了得到所实现功能所需要的数据。默认参数【缺省参数】defsum1(a=20,b=30):在调......
  • IIS 内存溢出(32位程序运行)
    背景最近新接手了一个项目,服务器正常,用户量也没有变化,不定时出现内存溢出,重启iis或者回收线程就正常了review发现,因为业务原因缓存的东西并没有释放掉,但远远没有达到服务器内存上线,也没有受到预警邮件巴拉很久,发现32位系统存在内存上限为什么32位程序只能使用最大2GB内......
  • iOS:响应链的原理
    iOS中不是所有的对象都能响应的,只有继承UIResponder的对象才能进行响应处理事件,称之为响应者对象。常见的响应者对象有:UIView,UIViewController,UIApplication响应链的流程:1.当产生某一个触摸事件的时候,这个触摸事件回添加到UIApplication管理的事件队列中。2.UIAppli......
  • iOS:字典存储数据的原理
    注:适用于Java等其他语言的技术原理存储的逻辑1.字典底层有一个数组,靠数组来存储数据;2.将key进行hash算法。得到`hash值`;3.将`hash值`与`数组的长度`进行`位与运算`,得到的结果为数据应该存储的位置;4.找到数组对应的位置,然后设置对应的数据(此处使用链表①进行......
  • 【深度思考】聊聊CGLIB动态代理原理
    1.简介CGLIB的全称是:CodeGenerationLibrary。CGLIB是一个强大的、高性能、高质量的代码生成类库,它可以在运行期扩展Java类与实现Java接口,底层使用的是字节码处理框架ASM。Github地址:https://github.com/cglib/cglib。CGLIB的Maven坐标如下所示:<dependency><groupId>......
  • python脚本打包与请求带session的区别
    pyinstaller-F-iD:\ico\123.icoXXX.py--key123456如何防止exe被反编译呢只需在打包命令后面加上--key命令即可,例如文章开头的命令可以更换为:pyinstaller-Fw--icon=h.icoauto_organize_gui.py--add-data="h.ico;/"--key123456123456是你用来加密的密钥,可以随......
  • 【THM】Python for Pentesters(使用Python辅助渗透测试)-学习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/pythonforcybersecurity本文相关内容:Python可能是网络安全领域使用最广泛、最方便的脚本语言,本文涵盖了一些Python脚本示例,包括哈希破解、键盘记录、枚举和扫描等。简介Python可以成为你的武器库中的强大工具,因为......
  • Python学习(2)-NumPy矩阵与通用函数
    1.NumPy矩阵1.1mat函数mat=asmatrixasmatrix(data,dtype=None):data:表示输入的数组或者字符串,使用‘,’分割列,使用‘;’分割行创建两个普通的矩阵:print(np.mat([1,2,3]))print(np.mat("1,2,3;4,5,6;7,8,9"))--------[[123]][[123][456][789]]需要注意:mat创建的......
  • Python下使用串口发送十六进制数据
    importserialfromtimeimportsleepdefrecv(serial):whileTrue:data=serial.read_all()ifdata=='':continueelse:breaksleep(0.2)returndataif__name__=='__main_......