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