Есть ли способ сериализовать лексическое замыкание в Python с помощью стандартной библиотеки? pickle и marshal не работают с лексическими замыканиями. Меня не волнуют подробности сериализации двоичных и строковых данных и т. д., это просто должно работать. Например:
def foo(bar, baz) :
def closure(waldo) :
return baz * waldo
return closure
Я хотел бы просто иметь возможность сбрасывать экземпляры закрытия в файл и читать их обратно.
Редактировать: Один из относительно очевидных способов решения этой проблемы - это некоторые хаки отражения для преобразования лексических замыканий в объекты класса и наоборот. Затем можно преобразовать в классы, сериализовать, десериализовать, преобразовать обратно в замыкания. Черт возьми, учитывая, что Python имеет утиный тип, если вы перегрузили оператор вызова функции класса, чтобы он выглядел как функция, вам даже не нужно было бы преобразовывать его обратно в замыкание, и код, использующий его, не знал бы разница. Если есть гуру API отражения Python, сообщите об этом.
import
(или execfile, eval и т. д.) 2. сохранить как объект упорядоченного кода (например, *.pyc)/загрузить использование маршала для преобразования строки в объект кода и его выполнения (или eval и т. д.). - person jfs   schedule 21.02.2009