Python |如何将ast表达式转换为字符串

时间:2014-08-21 09:01:52

标签: python-2.7 abstract-syntax-tree

我需要修改

中的数学表达式

wave_y + .3 * sin(time * .788) + .005 * (frame % 3)

wave_y + .3 * sin(time * .788) + .005 * fmodf(frame, 3)

为此,我编写了自己的Transformator

class PercentToFmodTransformer(ast.NodeTransformer):
    def visit_BinOp(self, node):
        if type(node.op).__name__ == 'Mod':
            result = ast.Call()
            result.func = ast.Name(id='fmodf', ctx=ast.Load())
            result.args = [node.left, node.right]
            result.keywords = []
            result.starargs = None
            result.kwargs = None

            return result
        else:
            return ast.NodeTransformer.generic_visit(self, node)

转型后我有Expression

Expression(
body=BinOp(
    left=BinOp(
        left=Name(id='wave_y', ctx=Load()), 
        op=Add(), 
        right=BinOp(
            left=Num(n=0.3), 
            op=Mult(), 
            right=Call(
                func=Name(id='sin', ctx=Load()), 
                args=[BinOp(left=Name(id='time', ctx=Load()), op=Mult(), right=Num(n=0.788))], 
                keywords=[], 
                starargs=None, 
                kwargs=None)
            )
        ), 
        op=Add(), 
        right=BinOp(
            left=Num(n=0.005), 
            op=Mult(), 
            right=Call(
                func=Name(id='fmodf', ctx=Load()), 
                args=[Num(n=3), Name(id='frame', ctx=Load())], 
                keywords=[], 
                starargs=None, 
                kwargs=None
            )
        )
    )
)

但我不知道如何以人类可读的格式打印它。可以这样做我的默认功能或者我应该为此写自己的访客吗?

P.S。我没有要求为我编写此访问者的实现,我只想知道是否可以通过inbox API执行此操作。

0 个答案:

没有答案