我compile今天遇到了一个内置功能.虽然我阅读了文档,但仍然不了解它的用法或适用的地方.请允许任何人用例子解释这个功能的使用.我会非常感激的例子.
从文档中,该函数采用如下所示的一些参数.
compile(source, filename, mode[, flags[, dont_inherit]])
Run Code Online (Sandbox Code Playgroud)
Bre*_*arn 53
它不常用.当您使用字符串形式的Python源代码时,可以使用它,并且您希望将其变为可以保留和使用的Python代码对象.这是一个简单的例子:
>>> codeobj = compile('x = 2\nprint "X is", x', 'fakemodule', 'exec')
>>> exec(codeobj)
X is 2
Run Code Online (Sandbox Code Playgroud)
基本上,代码对象将字符串转换为一个对象,稍后可以调用该对象exec来运行字符串中的源代码.(这是针对"exec"模式;"eval"模式允许使用eval,如果字符串包含单个表达式的代码.)这不是一个常见的任务,这就是为什么你可能永远不会满足它的需要.
其主要用途是元编程或嵌入情况.例如,如果您有一个允许用户使用自定义Python代码编写脚本行为的Python程序,您可以使用compile并exec存储和执行这些用户定义的脚本.
另一个原因compile是很少使用的是一样exec,eval和它们的同类,compile是一个潜在的安全漏洞.如果你以字符串形式获取用户代码并编译它然后执行它,你可能会运行不安全的代码.(例如,想象一下,在上面的例子中,代码formatYourHardDrive()代替了print x.)
Ale*_*ton 16
compile是水平较低版本exec和eval.它不会执行或评估您的语句或表达式,而是返回可以执行此操作的代码对象.模式如下:
compile(string, '', 'eval')返回已经执行过的代码对象eval(string).请注意,您不能在此模式下使用语句; 只有(单个)表达式有效.用于单个表达式.compile(string, '', 'exec')返回已经执行过的代码对象exec(string).您可以在此处使用任意数量的语句.用于整个模块.compile(string, '', 'single')就像exec模式一样,但它会忽略除第一个语句之外的所有内容.请注意,带有结果的if/ elsestatement被视为单个语句.用于单个语句.看看文档.在http://joequery.me/code/python-builtin-functions/#compile上还有一个很棒的(好的,愚蠢的)解释,其中有一个很好的使用示例.