Предварительно вычисленные объекты в Python

#python #optimization

#python #оптимизация

Вопрос:

Есть ли способ предварительно вычислить объект в Python?

Например, когда вы используете конструктор так же, как:

 master = Tk()
  

Есть ли способ предварительно вычислить и сохранить объект и прочитать его при запуске вместо его создания?

Я думаю только о сохранении работы или о том, чтобы сделать это заранее для процессора. О, и если вы знаете сценарий, в котором это действительно делается, я бы хотел услышать об этом.

Комментарии:

1. Вы имеете в виду что-то вроде pickle ? Не уверен, правильно ли я понял

Ответ №1:

Я думаю, что вы ищете pickle модуль для сериализации объекта. В Python 2 есть pickle and cPickle , который такой же, но быстрее, но имеет только iirc Python 3 pickle (который, под капотом, эквивалентен cPickle Python 2). Это позволит вам сохранить объект с его предварительно вычисленными атрибутами.

 import cPickle as pickle
import time

class some_object(object):
    def __init__(self):
        self.my_val = sum([x**2 for x in xrange(1000000)])

start = time.time()

obj = some_object()

print "Calculated value = {}".format(obj.my_val)
with open('saved_object.pickle', 'w') as outfile: #Save the object
    pickle.dump(obj, outfile)

interim = time.time()

reload_obj = pickle.load(open('saved_object.pickle','r'))

print "Precalculated value = {}".format(reload_obj.my_val)

end = time.time()

print "Creating object took {}".format(interim - start)
print "Reloading object took {}".format(end - interim)
  

Комментарии:

1. Вау, да, это абсолютно то, что я искал. Я думал о создании окон и кнопок внутри и прочее, а затем сохранить их в файл, так что я могу только выбрасывать их в стек при запуске моей программы, а не вычислять каждый раз.

2. Наверное, все, что мне нужно было знать, это то, что это называется сериализацией, чтобы найти это в Google, позор мне