我使用marshal模块序列化一些Python方法,并使用类型模块(Is there an easy way to pickle a python function (or otherwise serialize its code)?)重构它们。我无法使用可选的kwargs。 E.g。
import marshal
import types
def test_func(x, y, kw='asdf'):
return x, y, kw
serialized_code_string = marshal.dumps(test_func.func_code)
# In real code there is a bunch of file I/O here instead
unserialized_code_string = marshal.load(code_string)
new_func = types.FunctionType(code, globals(), "deserialized_function")
当我运行new_func(1,2)时,我得到的错误是new_func()正好接受3个参数(给定2个),即使kwarg是可选的。我认为问题出现在从func_code重构函数,但我不知道如何解决这个问题。如果没有办法,我会对重建保持kwarg功能的函数的替代方法感兴趣。
答案 0 :(得分:0)
经过一番搜索,我发现了莳萝包,它可以让你比cPickle腌制更多的东西(我使用元帅的原因)。当您直接重建序列化函数(不使用func_code)时,您可以避免我遇到的这个关键字问题。