2

我有一个像这样的 ast.dump :

"Module(body=[Assign(targets=[Name(id='i', ctx=Store())], value=Num(n=0)), While(test=Compare(left=Name(id='i', ctx=Load()), ops=[Lt()], comparators=[Num(n=10)]), body=[Print(dest=None, values=[Name(id='i', ctx=Load())], nl=True), AugAssign(target=Name(id='i', ctx=Store()), op=Add(), value=Num(n=1))], orelse=[]), For(target=Name(id='x', ctx=Store()), iter=Call(func=Name(id='range', ctx=Load()), args=[Num(n=10)], keywords=[], starargs=None, kwargs=None), body=[Print(dest=None, values=[Name(id='x', ctx=Load())], nl=True)], orelse=[])])"

我如何(漂亮地)以更易读的形式打印它,如下所示?

Module(
       body=[Assign(targets=[Name(id='i',
                                  ctx=Store())],
                    value=Num(n=0)),
             While(test=Compare(left=Name(id='i',
                                          ctx=Load()),
                                ops=[Lt()],
                   comparators=[Num(n=10)]),
                   body=[Print(dest=None,
                               values=[Name(id='i',
                                            ctx=Load())],
                               nl=True),
                         AugAssign(target=Name(id='i',
                                               ctx=Store()),
                                   op=Add(), 
                                   value=Num(n=1))], 
                         orelse=[]),
             For(target=Name(id='x', 
                             ctx=Store()),
                 iter=Call(func=Name(id='range',
                                     ctx=Load()), 
                           args=[Num(n=10)],
                           keywords=[], 
                           starargs=None,
                           kwargs=None),
                 body=[Print(dest=None, 
                             values=[Name(id='x',
                                          ctx=Load())], 
                             nl=True)],
                 orelse=[])])

如果您想知道是什么代码生成了这个:

text = '''
i = 0

while i < 10:
   print i
   i += 1
for x in range(10):
   print x
'''
ast.dump(ast.parse(text))
4

1 回答 1

2

它已经完成,例如通过这个 functionastppmodule

此代码中的后一个:

import ast
import astpp

tree = ast.parse(
"""
print "Hello World!"
s = "I'm a string!"
print s
""")
print astpp.dump(tree)

应该产生这个输出:

Module(body=[
    Print(dest=None, values=[
        Str(s='Hello World!'),
      ], nl=True),
    Assign(targets=[
        Name(id='s', ctx=Store()),
      ], value=Str(s="I'm a string!")),
    Print(dest=None, values=[
        Name(id='s', ctx=Load()),
      ], nl=True),
  ])
于 2013-05-10T06:42:42.637 回答