相关疑难解决方法(0)

Python可以腌制lambda函数吗?

我已经阅读了许多线程,Python pickle/ cPickle不能pickle lambda函数.但是,以下代码使用Python 2.7.6:

import cPickle as pickle

if __name__ == "__main__":
    s = pickle.dumps(lambda x, y: x+y)
    f = pickle.loads(s)
    assert f(3,4) == 7
Run Code Online (Sandbox Code Playgroud)

那么发生了什么?或者说,酸洗lambdas的限制是什么?

[编辑]我想我知道为什么这个代码运行.我忘了(抱歉!)我正在运行无堆栈python,它有一种称为tasklet执行函数的微线程形式.这些tasklet可以暂停,腌制,打开并继续,所以我猜(在无堆栈邮件列表上询问)它还提供了一种方法来挑选函数体.

python lambda pickle python-2.7

48
推荐指数
3
解决办法
4万
查看次数

AttributeError:无法腌制本地对象 '<locals>.<lambda>'

我正在尝试腌制使用以下命令创建的嵌套字典:

collections.defaultdict(lambda: collections.defaultdict(int))
Run Code Online (Sandbox Code Playgroud)

我的简化代码是这样的:

class A:
  def funA(self):
    #create a dictionary and fill with values
    dictionary = collections.defaultdict(lambda: collections.defaultdict(int))
    ...
    #then pickle to save it
    pickle.dump(dictionary, f)
Run Code Online (Sandbox Code Playgroud)

但是它给出了错误:

AttributeError: Can't pickle local object 'A.funA.<locals>.<lambda>'
Run Code Online (Sandbox Code Playgroud)

我打印字典后显示:

defaultdict(<function A.funA.<locals>.<lambda> at 0x7fd569dd07b8> {...}
Run Code Online (Sandbox Code Playgroud)

我尝试在该函数中使字典全局化,但错误是相同的。我很欣赏这个问题的任何解决方案或见解。谢谢!

python pickle jsonpickle python-3.6 python-3.7

12
推荐指数
2
解决办法
3万
查看次数