# -*- coding: utf-8 -*-
# @File : builtin-compile-example.py
# @Date : 2018-09-20
# @Author : Peng Shiyu
# eval 函数只针对简单的表达式.
# 如果要处理大块的代码, 你应该使用compile和exec 函数
name = "script.py"
script = "name = 'Tom'; age = 23; print(name, age)"
# 编译脚本, 返回一个代码对象
code = compile(script, name, "exec")
# 执行脚本 py2
# exec code
# ('Tom', 23)
import string
class CodeGeneratorBackend(object):
"""
在程序执行时实时地生成代码.
write 方法用于添加代码,
indent 和dedent 方法用于控制缩进结构.
其他部分交给类来处理.
"""
def begin(self, tab="\t"):
self.code = []
self.tab = tab
self.level = 0
def end(self):
self.code.append("") # 确保最后一行是空行
return compile(string.join(self.code, "\n"), "<code>", "exec")
def write(self, code):
self.code.append(self.tab * self.level + code)
def indent(self):
self.level += 1
def dedent(self):
if self.level == 0:
raise SyntaxError("缩进小于0")
else:
self.level -= 1
c = CodeGeneratorBackend()
c.begin()
c.write("for i in range(3):")
c.indent()
c.write("print('i = ', i)")
c.dedent()
# exec c.end()
"""
('i = ', 0)
('i = ', 1)
('i = ', 2)
"""
# execfile 函数, 一个从文件加载代码, 编译代码, 执行代码的快捷方式
# execfile("hello.py")
# hello world!