Форум сайта python.su
0
Доброго времени суток. Помогите пожалуйста понять следующую вещь. Функция repr() позволяет представить любой объёкт в некоем строковом виде, который потом может быть обратно преобразован в объект через eval().
>>> repr.__doc__
'repr(object) -> string\n\nReturn the canonical string representation of the object.\nFor most object types, eval(repr(object)) == object.'
Насколько я понял, некоторые объекты при попытке преобразовать их repr(), выдают просто некую ссылку на кусок памяти, где этот объект содержится. Но само содержимое этого объекта в строку преобразовать не удастся. Так? :(
Пример - я беру некое регулярное выражение и делаю следующее:
>>> import re
>>> tmp = re.compile(ur'(здесь-какое-то-регулярное-выражение)')
>>> repr(tmp)
'<_sre.SRE_Pattern object at 0x8804658>'
>>> tmp1 = {'t1':['asd', 'asdf'], 't2':'test'}
>>> repr(tmp1)
"{'t2': 'test', 't1': ['asd', 'asdf']}"Офлайн
32
corpseнет
… который потом может быть обратно преобразован в объект через eval().
Офлайн
32
Офлайн
20
Читайте про сериализацию, а pickle в Python это самый распространённый её способ, к тому же стандартный, т.е. включён в дистрибутив, а не распространяется третьими пакетами.
..bw
Офлайн
0
Спасибо за подсказки, обязательно изучу.
Офлайн
0
Попробовал.
>>> import re
>>> tmp = re.compile(ur'(то-самое-регулярное-выражение)')
>>> import cPickle
>>> tmp2 = cPickle.dumps(tmp)
>>> tmp2
'cre\n_compile\np1\n(V([^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*\\u0441\\u043A\\u043E\\u043B\\u044C\\u043A\\u043E[^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*.* .*([^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*\\u043C\\u0435\\u0441\\u0442\\u0430[^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*|[^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*\\u043E\\u0441\\u0442\\u0430\\u043B\\u043E\\u0441\\u044C[^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*)|[^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*\\u043D\\u0430[^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*.* .*[^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*\\u0448\\u0430\\u0440\\u0435[^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*)|[^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*\\u0448\\u0430\\u0440\\u0430[^a-zA-Z\\u0430-\\u044F\\u0410-\\u042F\\u0451\\u0401]*\np2\nI0\ntRp3\n.'
u'([^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*\u0441\u043a\u043e\u043b\u044c\u043a\u043e[^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*.* .*([^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*\u043c\u0435\u0441\u0442\u0430[^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*|[^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c[^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*)|[^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*\u043d\u0430[^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*.* .*[^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*\u0448\u0430\u0440\u0435[^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*)|[^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*\u0448\u0430\u0440\u0430[^a-zA-Z\u0430-\u044f\u0410-\u042f\u0451\u0401]*'
Офлайн
20
>> Читайте про сериализацию
> обязательно изучу
> Кстати, не совсем понятно
>> Читайте про сериализацию
> если полученный результат в памяти хранится в примерно таком же виде?
На каком основании выдвинуто такое утверждение, вы заглядывали в память?
..bw
Офлайн