繁体   English   中英

Python内置函数“编译”。 它是干什么用的?

[英]Python built-in function “compile”. What is it used for?

我今天遇到了一个内置函数compile 虽然我阅读了文档,但仍然不了解它的用法或适用位置。 请任何人以示例方式解释此功能的用法。 我将非常感谢示例。

在文档中,该函数采用一些参数,如下所示。

compile(source, filename, mode[, flags[, dont_inherit]])

它不是那么常用。 当您具有字符串形式的Python源代码并且想要将其变成可以保留和使用的Python代码对象时,将使用它。 这是一个简单的例子:

>>> codeobj = compile('x = 2\nprint "X is", x', 'fakemodule', 'exec')
>>> exec(codeobj)
X is 2

基本上,代码对象将字符串转换为对象,以后您可以调用exec来运行字符串中的源代码。 (这是针对“ exec”模式的;如果字符串包含单个表达式的代码,则“ eval”模式允许使用eval 。)这不是一项常见的任务,这就是为什么您永远不会遇到需要它的原因。

它的主要用途是在元编程或嵌入情况下。 例如,如果您有一个Python程序,该程序允许用户使用自定义Python代码编写其行为脚本,则可以使用compileexec来存储和执行这些用户定义的脚本。

很少使用compile另一个原因是,像execeval和它们的同类一样, compile是潜在的安全漏洞。 如果您以字符串形式获取用户代码并进行编译,然后再执行它,则可能正在运行不安全的代码。 (例如,假设在我上面的示例中,代码是formatYourHardDrive()而不是print x 。)

compileexeceval的较低版本。 它不会执行或评估您的语句或表达式,但会返回可以执行此操作的代码对象。 模式如下:

  1. compile(string, '', 'eval')返回如果完成eval(string)将会执行的代码对象。 请注意,您不能在这种模式下使用语句。 仅(单个)表达式有效。 用于单个表达式。
  2. compile(string, '', 'exec')返回如果执行完exec(string)后将要执行的代码对象。 您可以在此处使用任意数量的语句。 用于整个模块。
  3. compile(string, '', 'single')类似于exec模式,但是它将忽略除第一条语句以外的所有内容。 请注意,带有结果的if / else语句被视为单个语句。 用于一个语句。

看看那个文档 http://joequery.me/code/python-builtin-functions/#compile上也有一个很棒的解释(很好,很简单),其中有一个很好的用法示例。

您具体不了解什么? 该文档说明它将:

将源编译为代码或AST对象。 代码对象可以通过exec语句执行,也可以通过调用eval()进行eval() 源可以是Unicode字符串,Latin-1编码的字符串或AST对象。 有关如何使用AST对象的信息,请参阅ast模块文档。

因此,它需要python代码,并返回这两件事

  • exec将执行python代码
  • eval将计算一个表达式,其功能不如exec
  • ast允许您浏览代码生成的抽象语法树

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM