Я нашел значительный ответ от этого поста: Is there an easy way to pickle a python function (or otherwise serialize its code)?прекрасно сериализовать функцию в Python
однако, восстановленная функция кажется немного отличается от оригинала, который терпит неудачу моего теста.
Вот пример кода:
import marshal
# serialize
f1 = lambda x: x == 0
c1 = marshal.dumps(f1.func_code)
# deserialize
f2 = types.FunctionType(c1, globals())
# test
c1 = marshal.dumps(f1.func_code)
c2 = marshal.dumps(f2.func_code)
assert c1 == c2 # fails
Есть ли у вас какие-либо идеи, как улучшить сериализации/десериализации, чтобы устранить это искажение?
Или любое предложение по части проверки равенства?
PS: учтите только простую лямбду, но не сложное закрытие или обычную функцию.
нормально, мне кажется, что маршал сделал что-то странное, как и marshal.dumps (original.func_code) == marshal.dumps (recovered.func_code) возвращает значение ЛОЖЬ более точно, marshal.loads (marshal.dumps (original.func_code)) == original.func_code возвращает False – Sam
@Sam Ну, это работает для меня. Я добавил пример ответа. –