gpt4 book ai didi

python - 部分函数 "officially"是否可以pickl?

转载 作者:行者123 更新时间:2023-12-01 07:07:47 31 4
gpt4 key购买 nike

我需要创建一堆partial可以 pickle 的功能。根据经验测试,它似乎工作得很好:

import pickle
import functools

pickle.dumps(functools.partial(int, base=2))
# b'\x80\x03cfunctools\npartial\nq\x00cbuiltins\nint\nq\x01\x85q\x02Rq\x03(h\x01)}q\x04X\x04\x00\x00\x00baseq\x05K\x02sNtq\x06b.'

但是,文档中并未明确说明这一点,并且 functools.partial() 给出的“大致等效”函数不可 pickle 。

我可以假设 partial 对象在任何情况下都是可挑选的(没有边缘情况,独立于 C/Python 实现)?

最佳答案

文档中模拟 partial() 函数的代码片段不可picklable,因为它使用嵌套函数。然而,官方的 functools.partial() 是使用可选择的类来实现的: cpython/functools.py#L234

官方的 Python 问题跟踪器包含一些对不可挑选的 partial 对象的引用,这已被视为一个错误:

此外,还有单元测试来检查部分对象的可拾取性:cpython/test_functools.py#L244

changelog对于 Python 3.6 包含对 functools.partial 对象的可选取性的引用:

bpo-27137: the pure Python fallback implementation of functools.partial now matches the behaviour of its accelerated C counterpart for subclassing, pickling and text representation purposes.

出于这些原因,我认为人们可以放心地假设部分可选取性不是实现细节并且可以依赖。

关于python - 部分函数 "officially"是否可以pickl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58361373/

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