2010-01-02 1 views
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) 

Почему?
Следующего кода является функция рассола называют:Почему этот код возвращает «сложный»?

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") 
+0

Можете ли вы предоставить более подробную информацию о том, какое поведение вы видите и что ожидаете? –

+0

Где находится этот код? –

+1

@Roger, код находится из модуля copy_reg.py в стандартном дистрибутиве Python. – Theran

ответ

3

complex класса использовать для восстановления консервированного объекта. Он возвращается так, что его можно мариновать вместе с реальными и воображаемыми значениями. Затем, когда неакционер приходит, он видит класс и некоторые значения для использования в качестве аргументов его конструктору. Неуправляемый использует данный класс и аргументы для создания нового объекта complex, который эквивалентен оригиналу, который был маринован.

Подробнее об этом пояснили в статьях copy_reg и pickle documentation.

Смежные вопросы