Compile the source into a code or AST object. Code objects can be executed by an exec statement or evaluated by a call to eval(). source can either be a Unicode string, a Latin-1 encoded string or an AST object. Refer to the ast module documentation for information on how to work with AST objects.
compile
是exec
和eval
的低级版本。它不执行或计算语句或表达式,而是返回一个可以执行它的代码对象。模式如下:compile(string, '', 'eval')
返回如果完成eval(string)
本应执行的代码对象。注意,在此模式下不能使用语句;只有(单个)表达式有效。用于单个表达式。compile(string, '', 'exec')
返回如果完成exec(string)
本应执行的代码对象。这里可以使用任意数量的语句。用于整个模块。compile(string, '', 'single')
与exec
模式类似,但它将忽略除第一条语句之外的所有内容。请注意,if
/else
语句及其结果被视为单个语句。用于一个语句。看看documentation。在http://joequery.me/code/python-builtin-functions/#compile还有一个很棒的(好吧,简化了)解释,其中有一个很好的用法示例。
它没有那么常用。当您有字符串形式的Python源代码,并且希望将其变成一个可以保存和使用的Python代码对象时,就会使用它。下面是一个简单的例子:
基本上,code对象将一个字符串转换成一个对象,以后可以调用该对象来运行字符串中的源代码。(这是“exec”模式;“eval”模式允许使用
eval
,如果字符串包含单个表达式的代码。)这不是一个常见的任务,这就是为什么您可能永远不会遇到对它的需要。它主要用于元编程或嵌入情况。例如,如果有一个Python程序允许用户使用自定义Python代码编写其行为脚本,则可以使用
compile
和exec
来存储和执行这些用户定义的脚本。另一个很少使用
compile
的原因是,像exec
,eval
,和他们一样,compile
是一个潜在的安全漏洞。如果采用字符串形式的用户代码并编译它,然后再执行它,则可能运行不安全的代码。(例如,假设在上面的示例中,代码是formatYourHardDrive()
,而不是print x
。)你具体不明白什么?文档说明它将:
所以它需要python代码,然后返回
exec
将执行python代码eval
将计算一个比exec
功能更少的表达式ast
允许您导航代码生成的Abstract Syntax Tree相关问题 更多 >
编程相关推荐