如何避免Python中的lambda

2024-03-28 08:11:37 发布

您现在位置:Python中文网/ 问答频道 /正文

def parameterSchaetzung(kontextfreq,a,p,f1):
    parameter = defaultdict(lambda: defaultdict(int))
    for (s,w) in kontextfreq:
        parameter[s][w] = (kontextfreq[(s,w)] + a[s] * p[w]) / (f1[s] + a[s])
        #print((kontextfreq[(s,w)] + a[s] * p[w]) / (f1[s] + a[s]))
    return parameter

当我试图在pickle中写入函数的结果时,出现了一个错误。我想,问题是因为兰博达。我怎么解决?你知道吗

>>> parameter = defaultdict(lambda: defaultdict(int))
>>> pickle.dump(parameter,open("foo","wb"))
Traceback (most recent call last):
  File "<string>", line 301, in runcode
  File "<interactive input>", line 1, in <module>
_pickle.PicklingError: Can't pickle <function <lambda> at 0x00000000032DA620>: attribute lookup <lambda> on __main__ failed

Tags: lambdainforreturnparameterdeflinepickle
1条回答
网友
1楼 · 发布于 2024-03-28 08:11:37

程序中的lambda特性是已知的,不能pickle函数。你知道吗

您真正想要的是对数据进行pickle处理,因此在转储时只需转换为dict

pickle.dump(dict(parameter),f)

加载时转换回

parameter = defaultdict(lambda: defaultdict(int))
parameter.update(pickle.load(f))

相关问题 更多 >