Сделать функцию живой "внутри" модуля - PullRequest
1 голос
/ 12 января 2012

Я строю функцию во время выполнения с помощью 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 Ответ

2 голосов
/ 12 января 2012

Измените вторую строку на:

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