compile(source, filename, mode[, flags[, dont_inherit]])
参数 | 描述 |
---|---|
source | 字符串或者AST(Abstract Syntax Trees)对象。。 |
filename | 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。 |
mode | 指定编译代码的种类。可以指定为 exec, eval, single。 |
flags | 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。。 |
flags和dont_inherit | 是用来控制编译源码时的标志 |
例子1: 直接编译字符串
str = "for i in range(0,10): print(i)"
c = compile(str,'','exec') # 编译为字节代码对象
exec(c)
例子2:编译文件
flask中config类使用了此方法
def from_pyfile(self, filename, silent=False):
"""Updates the values in the config from a Python file. This function
behaves as if the file was imported as module with the
:meth:`from_object` function.
:param filename: the filename of the config. This can either be an
absolute filename or a filename relative to the
root path.
:param silent: set to ``True`` if you want silent failure for missing
files.
.. versionadded:: 0.7
`silent` parameter.
"""
filename = os.path.join(self.root_path, filename)
d = types.ModuleType('config')
d.__file__ = filename
try:
with open(filename, mode='rb') as config_file:
exec(compile(config_file.read(), filename, 'exec'), d.__dict__)
except IOError as e:
if silent and e.errno in (
errno.ENOENT, errno.EISDIR, errno.ENOTDIR
):
return False
e.strerror = 'Unable to load configuration file (%s)' % e.strerror
raise
self.from_object(d)
return True
参考:
exec eval 和compile
https://www.cnblogs.com/yangmingxianshen/p/7810496.html