Это сообщение: Рекурсия или Повторение? мог бы помочь.
Короче говоря, оптимизацию последнего вызова трудно сделать в JVM из-за модели обеспечения безопасности и потребности всегда иметь отслеживание стека в наличии. Эти требования могли в теории поддерживаться, но она, вероятно, потребует нового байт-кода (см. неофициальное предложение John Rose).
существует также больше обсуждения в ошибка Sun № 4726340 , где оценка (с 2002) заканчивается:
я полагаю, что это могло быть сделано, тем не менее, но это не маленькая задача.
В настоящее время, существует некоторая работа, продолжающаяся в Машина Da Vinci проект. Состояние подпроекта последнего вызова перечислено как "первичные 80%"; это вряд ли превратит его в Java 7, но я думаю, что это имеет очень хороший шанс в Java 8.
Сериализация словаря с repr
- это хороший способ сделать это. Затем вы можете восстановить его с помощью eval
или, если вы не доверяете данным, « безопасного eval ».
Преимущество repr перед травлением заключается в том, что данные доступны для чтения в базе данных, даже для запросов в безнадежных случаях.
Вы можете pickle словарь и сохранить его как StringProperty.
В основном вы можете использовать pickle, использовать db.Expando и сделать каждый ключ в dict отдельным свойством или иметь StringListProperty ключей и одно из значений и zip () при чтении они возвращаются к диктовке.
Я почти уверен, что нет никакого способа сохранить словарь Python. Но почему бы просто не поместить то, что вы хотите в хмель, в качестве второй модели?
Кроме того, как упоминал Джон, вы можете использовать рассол, но (и поправьте меня, если я ошибаюсь) сохраните его как Blob Вместо значение.