Рассол не может засолить именную кортеж - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь засечь namedtuple следующим образом:

def f():
    TemplateData = namedtuple('TemplateData', ['field1', 'field2'])
    f1 = np.random.randn(50,50)
    f2 = np.random.randn(50,50)
    td = TemplateData(f1, f2)
    return td

data = f()
with open("aaaa.pkl", "wb") as fl:
    pkl.dump(data, fl)

, но происходит сбой из-за ошибки:

PicklingError: Can't pickle <class '__main__.TemplateData'>: it's not the same object as __main__.TemplateData

Что не так?Если pickle не самый лучший способ хранения именованных кортежей - какой самый эффективный способ?

1 Ответ

0 голосов
/ 23 февраля 2019

Вам нужно определить namedtuple вне вашей функции и изменить имя вашего namedtuple на TemplateData.

TemplateData = namedtuple('TemplateData', ['field1', 'field2'])
f1 = np.random.randn(50,50)
f2 = np.random.randn(50,50)
model_cluster = TemplateData(f1, f2)

with open("aaaa.pkl", "wb") as fl:
    pkl.dump(model_clusters_dict, fl)
...