我是dill
作者。
您可以dill
在python3
不dill
直接使用的情况下使用...但是,它还没有现在那么好python2
。
>>> import dill
>>> import pickle
>>> pickle._dumps(lambda x:x*x)
b'\x80\x03cdill.dill\n_create_function\nq\x00(cdill.dill\n_load_type\nq\x01X\x08\x00\x00\x00CodeTypeq\x02\x85q\x03Rq\x04(K\x01K\x00K\x01K\x02KCC\x08|\x00\x00|\x00\x00\x14Sq\x05N\x85q\x06)X\x01\x00\x00\x00xq\x07\x85q\x08X\x07\x00\x00\x00<stdin>q\tX\x08\x00\x00\x00<lambda>q\nK\x01C\x00q\x0b))tq\x0cRq\rc__main__\n__dict__\nh\nNN}q\x0etq\x0fRq\x10.'
你会注意到_dumps
. 也许你觉得这很奇怪。这是。这是因为 in python3
,pickle
已经和以前被调用的模块合并了cPickle
。奇怪:
import _pickle
给你旧cPickle
模块
import pickle
为您提供pickle
模块,并cPickle
合并
pickle.dumps
只是_pickle.dumps
(即它的cPickle
)
pickle._dumps
是旧pickle.dumps
功能
令人困惑?它的症结在于:pickle.dumps
被编码在C
. 的2.x
版本pickle.dumps
是用 python 编码的,但现在它已被替换为cPickle.dumps
. 如果你想进入“旧”版本,你可以......它是pickle._dumps
.
当你import dill
,dill
自动注册它知道如何序列化到pickle
序列化表的所有对象——python
一个,而不是那个C
。因此,在 中python3
,这意味着连接到 的那个pickle._dumps
。
我建议dill.dumps
直接使用。
>>> dill.dumps(lambda x:x*x)
b'\x80\x03cdill.dill\n_create_function\nq\x00(cdill.dill\n_load_type\nq\x01X\x08\x00\x00\x00CodeTypeq\x02\x85q\x03Rq\x04(K\x01K\x00K\x01K\x02KCC\x08|\x00\x00|\x00\x00\x14Sq\x05N\x85q\x06)X\x01\x00\x00\x00xq\x07\x85q\x08X\x07\x00\x00\x00<stdin>q\tX\x08\x00\x00\x00<lambda>q\nK\x01C\x00q\x0b))tq\x0cRq\rc__builtin__\n__main__\nh\nNN}q\x0etq\x0fRq\x10.'
我想尝试让C
桌子最终工作......