我是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桌子最终工作......