Python 使一个函数活起来”;“内部”;模块
我正在用byteplay.py在运行时构建一个函数。当我完成字节码的构造后,我获取code对象并创建一个新函数,如下所示:Python 使一个函数活起来”;“内部”;模块,python,metaprogramming,Python,Metaprogramming,我正在用byteplay.py在运行时构建一个函数。当我完成字节码的构造后,我获取code对象并创建一个新函数,如下所示: module = new.module("foomodule") fn = new.function(c.to_code(), {}, name.name) setattr(module, "fn", fn) 现在这似乎可以工作了,我可以调用module.foo(),它可以按预期工作。但是,如果fn尝试调用全局函数,则调用会失败,因为传入new.function的全局函数
module = new.module("foomodule")
fn = new.function(c.to_code(), {}, name.name)
setattr(module, "fn", fn)
现在这似乎可以工作了,我可以调用module.foo(),它可以按预期工作。但是,如果fn尝试调用全局函数,则调用会失败,因为传入new.function的全局函数列表为空{}
问题是,我希望全局列表始终引用模块。那我该怎么做呢?如何将模块传递到新的.function?将第二行更改为:
fn = new.function(c.to_code(), module.__dict__, name.name)
工作得很有魅力!想到这一点,我想我试过了,但我又试了一次,效果很好!