我正在使用byteplay.py在运行时构建一个函数。当我完成构造字节码时,我接受代码对象并创建一个新函数,如下所示:
module = new.module("foomodule")
fn = new.function(c.to_code(), {}, name.name)
setattr(module, "fn", fn)
现在这似乎可以工作,我可以调用module.foo()并且它按预期工作。但是,如果fn尝试调用全局函数,则调用失败,因为传递给new.function的全局变量列表为空{}。
问题是,我希望全局变量列表始终引用模块。那我该怎么做?如何将模块传递给new.function?
答案 0 :(得分:2)
将第二行更改为:
fn = new.function(c.to_code(), module.__dict__, name.name)