通过简单demo让你秒懂Python的编译和执行全过程

news2025/1/6 14:14:59

在这里插入图片描述

基本说明

python 是一种解释型的编程语言,所以不像编译型语言那样需要显式的编译过程。然而,在 Python 代码执行之前,它需要被解释器转换成字节码,这个过程就是 Python 的编译过程。

DEMO演示讲解

假设我们有以下 Python 代码:

def add_numbers(a, b):
    return a + b

print(add_numbers(2, 3))

以下是 Python 编译与执行的具体步骤:

  1. 词法分析(Lexical Analysis):解释器会先将 Python 源代码分解成一系列的 Token(标记),每个 Token 包含了源代码中的一个词汇单元(例如变量名、关键字、操作符等)。这个过程又叫做扫描(Scanning),Python 解释器使用了一个名为 tokenizer 的模块来完成这个任务。Python 解释器将上面的代码分解成以下 Token:

    def, add_numbers, (, a, ,, b, ), :, return, a, +, b, print, (, add_numbers, (, 2, ,, 3, ), ), EOF
    
    
  2. 语法分析(Parsing):解释器会使用 Token,构建语法树(Syntax Tree)或抽象语法树(Abstract Syntax Tree,AST),以此来表示代码的结构和语法。AST 包含了源代码中的所有关键信息,并为解释器提供了执行代码的指令。Python 解释器使用了一个名为 parser 的模块来完成这个任务。Python 解释器使用 上面词法分析的Token 生成以下 AST

    Module(body=[
        FunctionDef(name='add_numbers', args=arguments(args=[
            arg(arg='a', annotation=None),
            arg(arg='b', annotation=None)
        ], vararg=None, kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[]),
        body=[Return(value=BinOp(left=Name(id='a', ctx=Load()), op=Add(), right=Name(id='b', ctx=Load())))],
        decorator_list=[],
        returns=None
    ),
    Expr(value=Call(func=Name(id='print', ctx=Load()), args=[Call(func=Name(id='add_numbers', ctx=Load()), args=[Num(n=2), Num(n=3)], keywords=[])], keywords=[]))
    ])
    
    
  3. 编译(Compilation):在生成AST之后,解释器将使用它来生成字节码(Bytecode)。字节码是一种类似于汇编语言的中间代码,是 Python 解释器的一种低级表示方式。Python 解释器使用了一个名为 compiler 的模块来完成这个任务。Python 解释器使用 上面得到的AST 生成以下字节码:

    1           0 LOAD_CONST               0 (<code object add_numbers at 0x10d0db7c0, file "<stdin>", line 1>)
                2 LOAD_CONST               1 ('add_numbers')
                4 MAKE_FUNCTION            0
                6 STORE_NAME               0 (add_numbers)
    
    3           8 LOAD_NAME                1 (add_numbers)
               10 LOAD_CONST               2 (2)
               12 LOAD_CONST               3 (3)
               14 CALL_FUNCTION            2
               16 CALL_FUNCTION            1
               18 POP_TOP
               20 LOAD_CONST               4 (None)
               22 RETURN_VALUE
    
    
  4. 执行(Execution):最后,Python 解释器将执行字节码,并将其转换成机器码来完成具体的操作。执行过程是由解释器来完成的,解释器会根据字节码中存储的指令,按照一定的顺序来执行代码。Python 解释器按照上面的指令逐个执行字节码,最终输出 5

其他说明

Python 是一种动态语言,它的特点是代码的执行过程中能够进行大量的动态操作。在 Python 编译过程中,生成字节码的过程和执行字节码的过程是同时进行的,这意味着 Python 解释器在执行代码时可以根据实际情况来进行优化,提高程序的性能。

例如,在运行时,Python 解释器会使用一些高级的优化技术,例如 JIT(Just-In-Time)编译、动态类型推断等,来提高代码的执行效率。这些优化技术在编译期间是不可用的,因为 Python 中很多类型和属性是在运行时才能确定的。

此外,Python 还支持元编程和动态导入等高级特性。元编程是指在运行时生成和操作程序的代码,这种方式可以使程序更加灵活和可扩展。动态导入是指在运行时根据需要动态加载和执行代码,这种方式可以使程序更加动态和可配置。这些特性在编译和执行过程中会对 Python 解释器的行为产生影响,需要在编译器和解释器中进行特殊处理。

总之,Python 的动态特性使得编译和执行过程相互交织,使得编译器和解释器需要更加灵活和智能地处理代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见安全设备

文章目录前言安全厂商安全设备种类拓扑图防火墙IDSIPSwaf上网行为管理器数据库审计系统全流量设备蜜罐态势感知前言 最近在了解安全设备的基本原理&#xff0c;简单做一下笔记。 安全厂商 深信服、浪潮、奇安信、绿盟、山石网科、启明星辰、安恒、360、新华3 安全设备种类 …

【CSS】元素显示与隐藏 ( display 隐藏对象 | visibility 隐藏对象 | overflow 隐藏对象 )

文章目录一、元素的显示与隐藏二、display 隐藏对象1、display 隐藏对象语法说明2、display 显示元素代码示例3、display 隐藏元素代码示例三、visibility 隐藏对象1、visibility 隐藏对象语法说明2、visibility 显示对象代码示例3、visibility 隐藏对象代码示例四、overflow 隐…

大数据项目实战之数据仓库:电商数据仓库系统——第5章 数据仓库设计

第5章 数据仓库设计 5.1 数据仓库分层规划 优秀可靠的数仓体系&#xff0c;需要良好的数据分层结构。合理的分层&#xff0c;能够使数据体系更加清晰&#xff0c;使复杂问题得以简化。以下是该项目的分层规划。 5.2 数据仓库构建流程 以下是构建数据仓库的完整流程。 5.2.1 …

在unreal中的基于波叠加的波浪水面材质原理和制作

关于水的渲染模型 如何渲染出真实的水体和模拟&#xff0c;是图形学&#xff0c;游戏开发乃至仿真领域很有意思的一件事 记得小时候玩《Command & Conquer: Red Alert 3》&#xff0c;被当时的水面效果深深震撼&#xff0c;作为一款2008年出的游戏&#xff0c;现在想起它…

RK3399平台开发系列讲解(基础篇)POSIX 定时器

🚀返回专栏总目录 文章目录 一、clockid二、sigevent三、timerid四、flags五、 value & old_value六、POSIX 定时器的优势沉淀、分享、成长,让自己和他人都能有所收获!😄 📢为了克服传统定时器的局限性,POSIX 标准组织设计了新的计时器接口和规范,使它们能提供更…

Java安全学习之RMI

最近在看Phith0n师傅的知识星球的Java安全漫谈系列&#xff0c;随手记下笔记 RMI全称远程方法调用(Remote Method Invocation)。这是允许驻留在一个系统(JVM)中的对象调用在另一个JVM上运行的对象的一种机制&#xff0c;能够远程调用远程对象的方法。 RMI通信过程、原理 我们首…

SSM实战-外卖项目-06-用户地址簿功能、菜品展示、购物车、下单(一个业务涉及5张表)

文章目录外卖项目-第六天课程内容1. 用户地址簿功能1.1 需求分析1.2 数据模型1.3 导入功能代码1.4 功能测试 &#xff08;其实需求分析里我就自己写了一份代码&#xff0c;而且测试过了&#xff0c;下面再测试了一遍&#xff09;2. 菜品展示2.1 需求分析2.2 前端页面分析2.3 代…

关于二叉树访问顺序的选择题

第一题&#xff1a; 从题目中我们可以得出这是棵完全二叉树&#xff08;最后一列不满&#xff0c;且连续&#xff09;&#xff0c;层次顺序。 我们可以推出树的形状&#xff1a; 我们现根据层次遍历的性质画出出栈的图&#xff1a; ABCDEFGH 最开始是A所以第一个位置为A&…

STC单片机波特率初值计算以及通用串口配置程序

STC单片机波特率初值计算以及通用串口配置程序&#x1f516;这里以STC15手册上的数据展开。&#x1f530;串口模式一&#xff1a;可变波特率8位数据方式。以为最为常用的配置模式。&#x1f33f;定时器1模式0:16位定时器计数器&#x1f33f;定时器1模式2:8位定时器计数器 ✨当然…

linux高级存储功能

高级存储功能 1、Stratis管理分层存储 通过Stratis&#xff0c;便捷的使用精简配置&#xff08;thin provisioning&#xff09;&#xff0c;快照&#xff08;snapshots&#xff09;和基于池&#xff08;pool-based&#xff09;的管理和监控的等高级存储功能。 &#xff08;1&a…

加拿大亚马逊FBA海运收费标准有哪些

众所周知&#xff0c;加拿大亚马逊的海运物流费用一般有头程运费、尾端派送费和仓储费等其他费用。那么&#xff0c;加拿大亚马逊FBA海运收费标准有哪些呢?接下来一起来了解下加拿大亚马逊FBA海运收费标准和费用。加拿大亚马逊FBA海运收费标准有哪些? 加拿大亚马逊FBA海运收费…

《Java8实战》第6章 用流收集数据

collect 是一个归约操作&#xff0c;就像 reduce 一样可以接受各种做法作为参数&#xff0c;将流中的元素累积成一个汇总结果。具体的做法是通过定义新的Collector 接口来定义的&#xff0c;因此区分 Collection、Collector 和 collect 是很重要的。用 collect 和收集器能够做什…

PADS-微处理器、USB转UART芯片、MINI-USB PCB封装设计

目录 1 微处理器PCB封装设计 2 USB转UART芯片PCB封装设计 3 MINI-USB PCB封装设计 4 添加验证 详细步骤不再文字说明&#xff0c;直接截取关键步骤截图 1 微处理器PCB封装设计 查看芯片手册 器件高度 器件高度1.6 管脚中心点间距0.5&#xff0c;管脚焊盘长1.2、宽0.3&…

[ 云计算 | Azure ] Chapter 04 | 核心体系结构之数据中心、区域与区域对、可用区和地理区域

本章节主要内容进行讲解&#xff1a;Azure云计算的核心体系结构组件中的&#xff1a;Azure物理基础设施&#xff08;Physical infrastructure&#xff09;&#xff0c;区域&#xff08;Regions&#xff09;和区域对&#xff08;Region Pairs&#xff09;、地理数据中心&#xf…

一文解决ethtool 原理介绍和解决网卡丢包排查思路

前言 之前记录过处理因为 LVS 网卡流量负载过高导致软中断发生丢包的问题&#xff0c;RPS 和 RFS 网卡多队列性能调优实践[1]&#xff0c;对一般人来说压力不大的情况下其实碰见的概率并不高。这次想分享的话题是比较常见服务器网卡丢包现象排查思路&#xff0c;如果你是想了解…

UE 简单插件制作

本文主要是提供几个写UE插件的实例&#xff0c;借此来了解在UE里使用C创建自定义插件的做法&#xff1a; 写一个使场景变暗的简单插件写一个自定义窗口&#xff0c;展示项目里所有的动画资产 写一个使场景变暗的简单插件 参考&#xff1a;Unreal Engine 5 - Writing Plugins …

统信UOS专业版系统安装教程 - 手动分区安装UOS系统

全文导读&#xff1a;本文主要介绍了安装UOS系统过程中使用手动分区安装方法&#xff0c;一般没有特殊要求建议使用全盘安装UOS系统。 准备环境 制作好统信UOS专业版启动U盘 一台CPU频率≥2GHz、内存≥4GB、硬盘≥64GB的电脑 安装步骤 一、制作UOS 系统启动盘 制作UOS 系…

自动驾驶TPM技术杂谈 ———— CCRT验收标准(评分标准)

文章目录介绍评价方法指标体系算分方法一级指标二级指标三级指标四级指标五级指标行车辅助能力得分说明跟车能力得分说明前车静止识别与响应得分说明前车低速识别与响应得分说明前车减速识别与响应得分说明前车切入识别与响应得分说明前车切出识别与响应得分说明跟随前车起停得…

数据结构小知识------时间与空间复杂度

本章思维导图&#xff1a; 一&#xff0c;时间复杂度 1.1时间复杂度的概念 &#x1f310;&#xff1a;什么是时间复杂度呢&#xff1f;时间复杂度其实就是一个程序运行时它的指令运行的次数。 在这里&#xff0c;程序默认每条指令的运行时间是一样的。所以时间复杂度就可以理解…

【云原生进阶之容器】第六章容器网络6.4.2--Flannel的安装与部署

1 flannel的安装与部署 见链接一篇文章带你了解Flannel - Flannel - 操作系统 - 深度开源 1.1 部署环境规划 1.2 安装部署 #tar -xf flannel-v0.13.0.tar.gz #mv /apps/svr/flannel-v0.13.0 #ln –svfn /apps/svr/flannel-v0.13.0 /apps/svr/flannel 1.2.1 调整Flannel配置…