2012-01-12 4 views
1

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

ответ

2

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

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

работал как шарм! Думал об этом, и я думал, что попробовал, но я просто попробовал еще раз, и он отлично работает! –

Смежные вопросы