#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, позор мне