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
  • 微