Python dill.dump fmode参数似乎没有任何作用



我正在试验dill,特别是dill.dump((的不同模式。fmode参数的文档表明,使用FILE_fmode或CONTENTS_fmode将抓取文件内容,这在一个位置序列化,然后在另一个位置反序列化并执行时非常有用。

然而,没有一个fmode值似乎有任何效果——我生成的所有pickle文件都是相同的。要复制的示例代码如下:

import dill as pickle
from dill import CONTENTS_FMODE, FILE_FMODE, HANDLE_FMODE
from test.pickle_classes import AddTwoIntegers
with open('add_two_ints_fmode_none.pkl', 'wb') as f:
pickle.dump(AddTwoIntegers, f)
with open('add_two_ints_fmode_contents.pkl', 'wb') as f:
pickle.dump(AddTwoIntegers, f, fmode=CONTENTS_FMODE)
with open('add_two_ints_fmode_file.pkl', 'wb') as f:
pickle.dump(AddTwoIntegers, f, fmode=FILE_FMODE)
with open('add_two_ints_fmode_handle.pkl', 'wb') as f:
pickle.dump(AddTwoIntegers, f, fmode=HANDLE_FMODE)

此代码所在的文件夹包含一个名为"test"的文件夹,其中有一个名"pickle_classes.py"的文件,包含以下代码:

class AddTwoIntegers:
@staticmethod
def add(a: int, b: int) -> int:
return a + b

但正如我所说,我创建的所有四个pickle文件都是相同的。我做错什么了吗?我是不是误解了fmode应该如何工作?我已经浏览了dill的源代码,我看到了fmode是如何设置的,但我根本不知道它在哪里使用。

我将dill 0.3.4与python 3.9.12结合使用。欢迎任何建议-TIA

我是dill的作者。抱歉,文档不清楚。因此,fmode的唯一使用位置是在pickle文件句柄(即FileTypeTextWrapperTypeBufferedReaderType或类似对象的实例(时,如下所示:

>>> import dill
>>> f = open('foo.txt', 'w')
>>> g = dill.copy(f, fmode=dill.FILE_FMODE)
>>> g
<_io.TextIOWrapper name='foo.txt' mode='w' encoding='UTF-8'>

有关几个示例,请参见:https://github.com/uqfoundation/dill/blob/master/dill/tests/test_file.py

最新更新