[英]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代码编写其行为脚本,则可以使用compile
和exec
来存储和执行这些用户定义的脚本。
很少使用compile
另一个原因是,像exec
, eval
和它们的同类一样, compile
是潜在的安全漏洞。 如果您以字符串形式获取用户代码并进行编译,然后再执行它,则可能正在运行不安全的代码。 (例如,假设在我上面的示例中,代码是formatYourHardDrive()
而不是print x
。)
compile
是exec
和eval
的较低版本。 它不会执行或评估您的语句或表达式,但会返回可以执行此操作的代码对象。 模式如下:
compile(string, '', 'eval')
返回如果完成eval(string)
将会执行的代码对象。 请注意,您不能在这种模式下使用语句。 仅(单个)表达式有效。 用于单个表达式。 compile(string, '', 'exec')
返回如果执行完exec(string)
后将要执行的代码对象。 您可以在此处使用任意数量的语句。 用于整个模块。 compile(string, '', 'single')
类似于exec
模式,但是它将忽略除第一条语句以外的所有内容。 请注意,带有结果的if
/ else
语句被视为单个语句。 用于一个语句。 看看那个文档 。 在http://joequery.me/code/python-builtin-functions/#compile上也有一个很棒的解释(很好,很简单),其中有一个很好的用法示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.