gpt4 book ai didi

Python、cPickle、 pickle lambda 函数

转载 作者:IT老高 更新时间:2023-10-28 20:39:10 25 4
gpt4 key购买 nike

我必须像这样 pickle 一组对象:

import cPickle as pickle
from numpy import sin, cos, array
tmp = lambda x: sin(x)+cos(x)
test = array([[tmp,tmp],[tmp,tmp]],dtype=object)
pickle.dump( test, open('test.lambda','w') )

它给出了以下错误:

TypeError: can't pickle function objects

有办法解决吗?

最佳答案

内置的pickle模块无法序列化多种python对象(包括lambda函数、嵌套函数和命令行定义的函数)。

picloud包包括一个更强大的pickler,可以pickle lambda函数。

from pickle import dumps
f = lambda x: x * 5
dumps(f) # error
from cloud.serialization.cloudpickle import dumps
dumps(f) # works

PiCloud 序列化对象可以使用正常的 pickle/cPickle loadloads 函数进行反序列化。

Dill也提供类似的功能

>>> import dill           
>>> f = lambda x: x * 5
>>> dill.dumps(f)
'\x80\x02cdill.dill\n_create_function\nq\x00(cdill.dill\n_unmarshal\nq\x01Uec\x01\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00C\x00\x00\x00s\x08\x00\x00\x00|\x00\x00d\x01\x00\x14S(\x02\x00\x00\x00Ni\x05\x00\x00\x00(\x00\x00\x00\x00(\x01\x00\x00\x00t\x01\x00\x00\x00x(\x00\x00\x00\x00(\x00\x00\x00\x00s\x07\x00\x00\x00<stdin>t\x08\x00\x00\x00<lambda>\x01\x00\x00\x00s\x00\x00\x00\x00q\x02\x85q\x03Rq\x04c__builtin__\n__main__\nU\x08<lambda>q\x05NN}q\x06tq\x07Rq\x08.'

关于Python、cPickle、 pickle lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16626429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com