python代码是如何执行的?

解释运行程序 🥊

回忆上次内容

  • py 文件的程序是按照顺序

    • 一行行挨排解释执行的
    • 我们可以 python3 -m pdb hello.py 来对程序调试
    • 调试的目的是去除 bug
    • 别害怕 bug
    • bug 会有提示
    • 我们也就知道如何 debug 调试
  • 顺序执行

    • 程序在文本中从上到下是一行行写的
    • 调试的时候也是从头到尾一行行执行的
    • 但是执行的时候是如何把代码一行行解释执行的呢?
  • 说到底 python3 到底是个啥呢?🤔

    • python3 又是怎么解释 hello.py 的?
    • 这两这节课相当复杂
    • 如果感觉太过复杂
    • 可以直接跳过
    • 不影响后面的理解 😄
  • 我们先要看看python3对Guido.py做了些什么???

tokenize

  • 首先把字符分组成词
  • 词法分析(lexical analysis)中

python代码是如何执行的?

  • 把原来的字符流
  • 变成了词的流

    • token(令牌)流

python代码是如何执行的?

  • 词法分析之后输出的是一个token流
  • 什么是token流呢?

    • 首先要知道什么是token

token

  • token

    • 令牌

python代码是如何执行的?

  • 古人说听我号令

    • 号指的是号角
    • 令指的是令牌

      • 急急如律令
      • 令行禁止
  • 怎么把源文件变成一个token流呢?

python3模块

  • 这个东西是python3的一个模块

python代码是如何执行的?正在上传…重新上传取消

  • 具体怎么运行呢?

token流

  • 我们尝试运行

    • python3 -m tokenize guido.py
    • 对guido.py进行词法分析
  • 分析出来的词(token)流长什么样子呢?

python代码是如何执行的?

  • 这个词怎么理解呢?

token流

  • 第0行设置了编码格式
  • 第1行[0,5)字符是第1行第1个token

    • print
    • print是一个Name(名字)
  • 第1行[5,6)字符是第1行第2个token

    • (
    • (是一个Operator(操作符)
  • 第1行[6,30)字符是第1行第3个token

    • "1982------Guido in cwi"
    • 这是一个String(字符串)
  • 第1行[30,31)字符是第1行第4个token

    • )
    • )是一个Operator(操作符)
  • 第1行[31,32)字符是第1行第5个token

    • n
    • n是一个NewLine(换行符)
    • 换行符意味着第一行结束
  • 第2行...

python代码是如何执行的?

组词

python代码是如何执行的?

引入ast模块

python代码是如何执行的?

流程

python代码是如何执行的?

缩进换行

python代码是如何执行的?

缩进演示

python代码是如何执行的?

翻译成字节码

python代码是如何执行的?

compile

python代码是如何执行的?

python代码是如何执行的?

二进制形态

python代码是如何执行的?

二进制

python代码是如何执行的?

反编译

python代码是如何执行的?

反编译(dis)

python代码是如何执行的?

指令

python代码是如何执行的?

二进制状态

python代码是如何执行的?

4条指令

指令助记符 指令含义 十进制状态 十六进制状态
LOAD_NAME 装载函数名称 101 0x65
LOAD_CONST 装载参数 100 0x64
CALL_FUNCTION 调用函数 142 0x8e
POP_TOP 弹栈返回 1 0x01

python代码是如何执行的?

虚拟机的虚拟cpu

python代码是如何执行的?

总结

python代码是如何执行的?

 
本文章来自于《oeasy教您玩转python》(https://www.lanqiao.cn/courses/3584)中第6个实验。

举报
发表评论

相关文章

当前内容话题
  • 0