使用带有元帅和类型的kwargs重建python方法?

时间:2015-06-18 18:59:11

标签: python serialization deserialization marshalling unmarshalling

我使用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功能的函数的替代方法感兴趣。

1 个答案:

答案 0 :(得分:0)

经过一番搜索,我发现了莳萝包,它可以让你比cPickle腌制更多的东西(我使用元帅的原因)。当您直接重建序列化函数(不使用func_code)时,您可以避免我遇到的这个关键字问题。