Как сохранить объект кода в файле?

#python

#python

Вопрос:

Как сохранить объект кода (_ _ code _ _) в файле?

 >>> c
<code object foo at 0x022E7660, file "<console>", line 1>
>>> pickle.dump(c, f)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
_pickle.PicklingError: Can't pickle <class 'code'>: attribute lookup builtins.code failed
>>> f.write(c)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'code' does not support the buffer interface
  

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

1. Объекты Code по своей сути зависят от платформы и pickle являются независимым от платформы форматом. Не существует простого способа представления объекта кода независимо от платформы, но обычно вам это и не нужно. Чего вы пытаетесь достичь?

Ответ №1:

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

 >>> import marshal
>>> def f():
...    print 'f'
>>> marshal.dump(f.__code__, open('test.dump'))
>>> code = marshal.load(open('test.dump'))
>>> f.__code__ == code
True
>>> import dis
>>> dis.dis(code)
  2           0 LOAD_CONST               1 ('f')
              3 PRINT_ITEM          
              4 PRINT_NEWLINE       
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE  
  

Ответ №2:

Я поискал в Google и нашел кое-что, что может быть полезным: http://python.about.com/od/pythonstandardlibrary/a/pickle_intro.htm

с уважением

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

1. Пожалуйста, не отправляйте просто ссылку в качестве ответа.

2. Кроме того, не могли бы вы сказать, что именно полезно в этом тексте? Замалчивая это, я видел только пару предложений, представляющих pickle в целом.