gpt4 book ai didi

python - 如何修补函数的 __code__?

转载 作者:行者123 更新时间:2023-11-30 22:28:14 24 4
gpt4 key购买 nike

我正在探索 __code__ 属性和 ast 模块,发现奇怪的行为,函数的第一次调用不会输出任何内容:

In [3]: def foo():
...: print('foo')
...:
In [4]: p = ast.parse("".join(inspect.getsourcelines(foo)[0]))
In [5]: p.body[0].body = ast.parse("print('bar')").body
In [6]: foo.__code__ = compile(p, foo.__code__.co_filename, 'exec')
In [7]: foo() # Nothing happens??

In [8]: foo() # Okay, let's try again
bar

这里发生了什么?

最佳答案

您可能认为您已将 foo.__code__ 设置为打印 bar 的代码对象,但这不是您所做的。您已将 foo.__code__ 设置为一个代码对象,该对象定义了一个用于打印 bar 的新 foo 函数。有点像

def foo():
global foo
def foo():
print('bar')

第一次运行后,foo是新的条形打印函数,运行新函数会打印bar

关于python - 如何修补函数的 __code__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46675651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com