Python 的 compile() 函式可以将字串转换成可执行的程式码物件,可以用来执行动态的程式码,或是建立可重复使用的程式码物件。

其中,source 是要编译的字串,filename 是档案名称,mode 是指定编译模式,可以是 exec、eval 或 single,flags 是指定编译时的选项,dont_inherit 是指定是否要继承全域变数,optimize 是指定编译时的优化等级。

下面是一个简单的范例,使用 compile() 函式将字串转换成可执行的程式码物件:

可以看到,执行程式码物件后,可以得到正确的结果。

Python 的 compile() 函式可以让我们将字串转换成可执行的程式码物件,可以用来执行动态的程式码,或是建立可重复使用的程式码物件,是一个非常有用的函式。

compile() 函式有五个参数,分别是 source、filename、mode、flags 和 optimize,下面就来介绍一下这些参数的用途:

source:要编译的字串,可以是一个字串或是一个字串的序列(例如:list 或 tuple)。

filename:档案名称,可以是一个字串,用来指定编译时的档案名称,可以用来指定编译时的错误讯息。

mode:指定编译模式,可以是 exec、eval 或 single,exec 模式用来执行模组,eval 模式用来评估表达式,single 模式用来执行单一的语句。

flags:指定编译时的选项,可以是 0 或是一个或多个以下的选项的组合:

ast.PyCF_ONLY_AST:只返回抽象语法树,不编译程式码。

dont_inherit:指定是否要继承全域变数,如果设为 True,则不会继承全域变数,如果设为 False,则会继承全域变数。

optimize:指定编译时的优化等级,可以是 0、1、2 或 -1,0 表示不做优化,1 表示做一些简单的优化,2 表示做更多的优化,-1 表示使用预设的优化等级。

Python 的 compile() 函式可以将字串转换成可执行的程式码物件,可以用来执行动态的程式码,或是建立可重复使用的程式码物件,是一个非常有用的函式。