Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “是部分函数”;正式地;可挑选的?_Python_Pickle_Functools - Fatal编程技术网

Python “是部分函数”;正式地;可挑选的?

Python “是部分函数”;正式地;可挑选的?,python,pickle,functools,Python,Pickle,Functools,我需要创建一组可以进行pickle处理的函数。通过经验测试,它似乎工作得很好: 导入pickle 导入功能工具 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' 但是,文档中没有明确说明这一点,并且的给定

我需要创建一组可以进行pickle处理的函数。通过经验测试,它似乎工作得很好:

导入pickle
导入功能工具
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'
但是,文档中没有明确说明这一点,并且的给定“大致等效”函数不可拾取


我是否可以假设
partial
对象在任何情况下都是可拾取的(没有边缘情况,与C/Python实现无关)?

文档中模拟
partial()
函数的代码片段不可拾取,因为它使用嵌套函数。但是,官方的
functools.partial()
是使用可拾取的
类实现的:

官方的Python问题跟踪器包含了对不可拾取的
partial
对象的多个引用,这被认为是一个bug:

此外,还有一些单元测试用于检查
部分对象的可拾取性:

Python3.6版包含对
functools.partial
对象可拾取性的引用:

:functools.partial的纯Python回退实现现在与它的加速C对应的行为相匹配,用于子类化、pickle和文本表示


基于这些原因,我认为可以有把握地假设,
partial
picklability不是一个实现细节,可以依赖。

您是否查看了?@jornsharpe:该实现被下面的
替换为
。@user2357112可能,是的,但问题仍然是,大致相当的实现并不是实际的实现。你读过pickle文档吗?有一整节是关于如何创建自己的可pickle类的。您阅读了这里的答案注释了吗?正如我在问题注释中提到的,
functools.py
中的内容不是实际的实现。它是一种替代实现,可以立即替换。