Python编译器和虚拟机如何处理eval表达式? < P>让我假设在 Python 表达式,例如: exp = raw_input() eval(exp)

Python编译器和虚拟机如何处理eval表达式? < P>让我假设在 Python 表达式,例如: exp = raw_input() eval(exp),python,compilation,interpreter,Python,Compilation,Interpreter,我的问题是:Python的编译器和解释器使用哪种机制来绑定可以用依赖于运行时值的代码编译的代码?Python编译器不关心它编译的代码来自何处。当您运行python filename时,它可以在执行之前编译来自文件的代码;当您使用import时,它可以在执行期间编译文件;当您调用eval()或exec()时,它可以从字符串表达式编译代码。这些函数动态调用编译器。由于Python是解释的,它可以从eval()@Barmar调用自己的编译器/解释器。我知道Python代码在Python虚拟机中执行之前

我的问题是:Python的编译器和解释器使用哪种机制来绑定可以用依赖于运行时值的代码编译的代码?

Python编译器不关心它编译的代码来自何处。当您运行
python filename
时,它可以在执行之前编译来自文件的代码;当您使用
import
时,它可以在执行期间编译文件;当您调用
eval()
exec()
时,它可以从字符串表达式编译代码。这些函数动态调用编译器。

由于Python是解释的,它可以从
eval()
@Barmar调用自己的编译器/解释器。我知道Python代码在Python虚拟机中执行之前要经过编译阶段。我的问题是:在这种依赖于执行时提供的表达式的情况下,这种预编译是如何工作的?在执行时,解释器是否编译了编码部分,并绑定了依赖部分?编译器由
eval()
调用。编译器不仅仅在执行前运行。如果使用
导入
,则必须编译要从中导入的文件
eval()
类似,它只是从变量而不是文件中获取要编译的代码。这很有意义。非常感谢。考虑添加答案