1
# Example: provide pickling support for complex numbers.

try:
    complex
except NameError:
    pass
else:

    def pickle_complex(c):
        return complex, (c.real, c.imag) # why return complex here?

    pickle(complex, pickle_complex, complex)

为什么?
以下代码是被调用的 pickle 函数:

dispatch_table = {}

def pickle(ob_type, pickle_function, constructor_ob=None):
    if type(ob_type) is _ClassType:
        raise TypeError("copy_reg is not intended for use with classes")

    if not callable(pickle_function):
        raise TypeError("reduction functions must be callable")
    dispatch_table[ob_type] = pickle_function

    # The constructor_ob function is a vestige of safe for unpickling.
    # There is no reason for the caller to pass it anymore.
    if constructor_ob is not None:
        constructor(constructor_ob)

def constructor(object):
    if not callable(object):
        raise TypeError("constructors must be callable")
4

1 回答 1

3

complex是用于重构腌制对象的类。它被返回,以便它可以与 real 和 imag 值一起腌制。然后当 unpickler 出现时,它会看到类和一些值用作其构造函数的参数。unpickler 使用给定的类和参数来创建一个新complex对象,该对象与被腌制的原始对象等效。

这在copy_regpickle 文档中有更详细的解释。

于 2010-01-02T06:30:41.157 回答