Python中的AST操作

时间:2014-07-13 15:34:37

标签: python python-3.x compiler-construction abstract-syntax-tree

我希望能够(仅仅是出于乐趣和教学目的)修改函数的AST只是为了更改应该打印出来的字符串。

经过一些实验后,我认为这样的事情应该有效,但是即使没有错误,第二个功能也不会打印任何东西。

对我失踪的事情有任何想法? (第二个功能应该只打印世界'而不是' hello world'基本上)。

def function_hello():
    print('hello world')


def remove_hello():
    import ast
    import inspect
    source = inspect.getsource(function_hello)
    ast_tree = ast.parse(source)
    st = ast_tree.body[0].body[0].value.args[0]
    st.s = st.s.replace('hello ', '')
    return compile(ast_tree, __file__, mode='exec')


if __name__ == '__main__':
    function_hello()
    exec(remove_hello())

1 个答案:

答案 0 :(得分:3)

执行编译的代码会覆盖函数function_hello(不调用它)。您需要致电function_hello()以查看您想要的内容。

if __name__ == '__main__':
    function_hello()
    exec(remove_hello())  # This does not call the function.
    function_hello()  # <-----------