如何copy_reg保存reduce / rebuild函数

2024-04-29 15:02:13 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我使用copy_reg.pickle注册reduce函数,如下所示。你知道吗

import copy_reg, copy, pickle

some_global_variable = 10

class C(object):
  def __init__(self, a):
    self.a = a
    self.b = some_global_variable

def unpickle_c(a):
  c = C(a)
  c.b = some_global_variable

def pickle_c(c):
  return unpickle_c, (c.a,)

copy_reg.pickle(C, pickle_c)

我有几个问题:

  1. 函数unpickle_c是否保存为序列化对象并在取消勾选时调用?如果这是真的,是否意味着我不能访问函数之外的状态,比如unpickle_c函数中的some_global_variable?或者全局变量也将保存为序列化函数对象的一部分?

  2. 如果上述情况不成立,那么unpickle_c是否保存为某个标识符,函数是否只是简单地定位并在取消勾选时调用?如果这是真的,是否意味着在取消勾选时包含unpickle_c的模块尚未导入,它将被导入?


Tags: 对象函数importselfreduce序列化defsome
1条回答
网友
1楼 · 发布于 2024-04-29 15:02:13

我刚从自己实验泡菜模块得到答案。基本上子弹2是真的。通过检查pickle字符串,将保存模块名称和重建函数的名称。在取消勾选时导入模块,然后调用该模块中的函数。你知道吗

相关问题 更多 >