gpt4 book ai didi

python - Python可以 pickle lambda函数吗?

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

我在许多线程中读到 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

那么发生了什么?或者更确切地说, pickle lambda 的极限是多少?

[编辑]我想我知道为什么这段代码会运行。我忘记了(对不起!)我正在运行无堆栈 python,它有一种称为 tasklet 的微线程形式来执行一个函数。这些 tasklet 可以暂停、 pickle 、取消 pickle 和继续,所以我猜(在无堆栈邮件列表中询问)它还提供了一种 pickle 函数体的方法。

最佳答案

是的,python 可以 pickle lambda 函数……但前提是你有使用 copy_reg 来注册 如何 pickle lambda 函数的东西——包 dill 将您需要的 copy_reg 加载到 pickle 注册表中,当您 import dill 时。

Python 2.7.8 (default, Jul 13 2014, 02:29:54) 
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import dill # the code below will fail without this line
>>>
>>> import pickle
>>> s = pickle.dumps(lambda x, y: x+y)
>>> f = pickle.loads(s)
>>> assert f(3,4) == 7
>>> f
<function <lambda> at 0x10aebdaa0>

在这里获取莳萝:https://github.com/uqfoundation

关于python - Python可以 pickle lambda函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25348532/

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