栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是Python解释,编译还是两者兼而有之?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是Python解释,编译还是两者兼而有之?

首先,解释/编译不是语言的属性,而是实现的属性。对于大多数语言,大多数(如果不是全部)实现都归为一类,因此可以省去几个词来说明该语言也经过解释/编译,但这仍然是一个重要的区别,这既因为它有助于理解,又因为有相当多种语言具有两种可用的实现(主要在功能语言领域,请参见Haskell和ML)。另外,有些C解释器和项目试图将Python的子集编译为C或C
++代码(然后编译为机器代码)。

其次,编译不限于提前编译为本机代码。更一般而言,编译器是一种将一种编程语言的程序转换为另一种编程语言的程序的程序(可以说,如果应用了重要的转换,甚至可以使编译器使用相同的输入和输出语言)。而且,JIT编译器可以
在运行时 编译为本地机器代码,其速度可以非常接近甚至优于提前编译(取决于基准和所比较实现的质量)。

但是,为了避免挑剔并回答您要问的问题:实际上(阅读:使用一种流行且成熟的实现),Python被 编译了
。不会提前编译为机器代码(即受限制和错误的“编译”,但是很常见的定义),“仅”编译为字节码,但是它仍然具有至少一些优点。例如,该语句

a= b.c()
被编译为字节流,当“反汇编”时,它看起来像
load 0 (b); load_str 'c'; get_attr;call_function 0; store 1 (a)
。这是一个简化,实际上它的可读性较低,而底层则更高级-
您可以尝试使用标准库
dis
模块,看看真正的交易是什么样子。

就像参考实现(CPython)一样,该字节码也可以被解释(请注意,直接解释和首先编译为某种中间表示并进行解释之间,在理论上和实际性能上都有区别),或者在解释和编译为与PyPy一样,在运行时优化了机器代码。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号