在模块内“实现”功能

时间:2012-01-12 18:39:50

标签: python metaprogramming

我正在使用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?

1 个答案:

答案 0 :(得分:2)

将第二行更改为:

fn = new.function(c.to_code(), module.__dict__, name.name)