Python的解释器和字节码

首先我们先规定Python解释器指的是 CPython解释器。

1.py文件和pyc文件的区别是什么?为什么Python的解释这两个文件都能运行?

CPython虚拟机既可以执行python文件,又可以执行编译过的pyc文件,这是因为CPython里面包含了一个可以编译py文件的编译器,执行py文件时,第一步就是要在cpython内部将py文件翻译成字节码文件即pyc文件。

例如创建hello.py文件

print 1+2+3

使用命令python -m compileall hello.py  编译成 hello.py文件

使用  hexdump hello.pyc  输出 pyc文件

0000000 f303 0a0d 1760 5ec9 0063 0000 0000 0000
0000010 0200 0000 4000 0000 7300 0009 0000 0564
0000020 4700 6448 0003 2853 0006 0000 0169 0000
0000030 6900 0002 0000 0369 0000 4e00 0369 0000
0000040 6900 0006 0000 0028 0000 2800 0000 0000
0000050 0028 0000 2800 0000 0000 0873 0000 6800
0000060 6c65 6f6c 702e 7479 0008 0000 6d3c 646f
0000070 6c75 3e65 0001 0000 0073 0000 0000     
000007d

2.Python和JAVA都编译成字节码,但为什么Python就叫解释器,JAVA叫虚拟机呢?

CPython内部流程如下图所示:

  • Scanner 对应词法分析器, 将从文件输入的代码切分为 token
  • Parser 对应语法分析器, 在Scanner 的分析结果上进行语法分析, 建立 AST
  • Compiler 根据建立的 AST 生成指令集合 Python 字节码 (这里的 .pyc 文件类似于Java 的 .class 文件)
  • Code Evaluator 执行代码

       Jython 是把 Interpreter 给重写了生成的是.class 文件。

     

       简单的说Python 的解释器包含了 Python 的虚拟机。因为Python的解释器是包括Scanner 、Parser 、Compiler 、Code Evaluator的。

       Java的编译和执行是分开的,java虚拟机只负责执行。jvm对应的就是Code Evaluator

       Python的文件 比如test.py 只需要 python test.py就可以直接编译和执行
 

 参考:

python字节码介绍

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值