python - 使用函数调用打印字符串

标签 python string pretty-print

我有一个像这样的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))

最佳答案

已经完成了,例如by this functionastpp module .

此代码中的后一个:

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),
  ])

关于python - 使用函数调用打印字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16476494/

相关文章:

python - 嵌套生成器到嵌套列表

python - 使用python层Caffe实现Bhattacharyya损失函数

python - Flask-admin:捕获 inline_models 上的更改

c++ - 从字符串中删除所有字符

json - 如何轻松查看符合 `Codable` 协议(protocol)的对象的 JSON 输出

pretty-print - 了解 Wadler 的 Prettier 打印机的性能特点

python - PyArcade (Pyglet) python3 需要帮助

python - 扭曲不检测客户端断开连接

java - Boyer-Moore 算法是否可以更改为仅搜索 "full words"?

c++ - 在限制之间搜索 std::string