python是编译还是解释_Python是解释的,还是编译的,或者两者都是?

首先,解释/编译不是语言的属性,而是实现的属性。对于大多数语言来说,大多数(如果不是所有的话)实现都属于一个类别,因此人们可能会省下一些话,说语言也是解释/编译的,但这仍然是一个重要的区别,因为它有助于理解,而且有相当多的语言具有这两种类型的可用实现(主要是在函数领域语言,见Haskell和ML)。此外,还有C编译器和项目,试图将Python的一个子集编译成C或C++代码(随后是机器代码)。

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

但是为了停止挑剔并回答您想问的问题:实际上(阅读:使用一个比较流行和成熟的实现),Python是经过编译的。不是提前编译为机器代码(即“编译”受限制且错误,但可惜是通用定义),“仅”编译为bytecode,但它仍然是编译,至少有一些好处。例如,语句a = b.c()被编译为字节流,当“反汇编”时,它看起来有点像load 0 (b); load_str 'c'; get_attr; call_function 0; store 1 (a)。这是一个简化,实际上可读性更低,层次更低一些-您可以使用标准库^{} module进行实验,看看真正的交易是什么样子的。解释这一点比从更高层次的表述中解释要快。

字节码要么被解释(注意,在理论上和实际性能上,直接解释和第一次编译到某个中间表示之间存在差异,并解释它),就像引用实现(CPython)一样,要么在运行时被解释和编译为优化的机器码,和PyPy一样。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值