Получение целых чисел из кортежа, сохраненного и загруженного с помощью pickle - PullRequest
0 голосов
/ 20 сентября 2011

На Python я сделал модуль для сохранения и загрузки целых чисел, он может сохранять примерно так, как я хочу (я использую Pickle), но когда я загружаю его, я получаю свои целые числа в форме кортежа (потому что я сделал его кортежем) сохранить) Я хочу назначить компоненты кортежа целым числам в моей программе, но это не поможет! Вот мой код:

def save(ob1,ob2,ob3,ob4,ob5):
    import pickle
    tmp = ob1,ob2,ob3,ob4,ob5
    output = open('save.sav','w')
    pickle.dump(tmp,output)
    output.close()

def load(ob1,ob2,ob3,ob4,ob5):
    import pickle
    input2 = open('save.sav','r')
    pickleload = pickle.load(input2)
    ob1 = pickleload[0]
    ob2 = pickleload[1]
    ob3 = pickleload[2]
    ob4 = pickleload[3]
    ob5 = pickleload[4]

Я пытался сделать то, что сказал Экс, но это не сработало. Я, вероятно, помещаю его код в неправильные места или что-то подобное. Экс, не могли бы вы объяснить это лучше, или перепостить мой код, но отредактированный? Или кто-то еще может мне помочь?

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Изменить load() примерно так:

def load():
    import pickle
    input2 = open('save.sav','r')
    return pickle.load(input2)

Тогда его можно использовать так:

ob1, ob2, ob3, ob4, ob5 = load()

Ваша оригинальная версия не работает, потому что при назначении ob1 = ...внутри функции изменение не передается вызывающей стороне, когда функция возвращает (ob1 является неизменным объектом, который передается по ссылке; при присвоении ему выполняется повторная ссылка на ссылку, но новая ссылка не передается обратновызывающая сторона).

0 голосов
/ 12 июня 2012

Следующий фрагмент кода Python должен вам помочь.Переменным от ob1 до ob5 присваивается результат pickle.load(open('save.sav', 'r')) Переменные объявляются глобальными, поэтому к ним можно обращаться вне функции def load():.

import pickle
def load():
    global ob1, ob2, ob3, ob4, ob5
    ob1, ob2, ob3, ob4, ob5 = pickle.load(open('save.sav', 'r'))
...