我希望能够(仅仅是出于乐趣和教学目的)修改函数的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())
答案 0 :(得分:3)
执行编译的代码会覆盖函数function_hello
(不调用它)。您需要致电function_hello()
以查看您想要的内容。
if __name__ == '__main__':
function_hello()
exec(remove_hello()) # This does not call the function.
function_hello() # <-----------