Документация Python неофициальный перевод

pickletools.md

78 строк · 5.9 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.14/library/pickletools.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `pickletools` – утилиты для разработчиков pickle89**Исходный код:** [Lib/pickletools.py](https://python-all.ru/src/3.14/Lib/pickletools.py)1011---1213Этот модуль содержит различные константы, касающиеся внутренних деталей модуля [`pickle`](https://python-all.ru/3.14/library/pickle.html#module-pickle), несколько пространных комментариев о реализации и несколько полезных функций для анализа данных, сериализованных с помощью pickle. Содержимое этого модуля может быть полезно разработчикам ядра Python, работающим над `pickle`; обычным пользователям модуля `pickle` модуль `pickletools`, скорее всего, не нужен.1415## Использование командной строки1617Добавлено в версии 3.2.1819При запуске из командной строки `python -m pickletools` дизассемблирует содержимое одного или нескольких pickle-файлов. Обратите внимание: чтобы увидеть объект Python, хранящийся в pickle, а не детали формата pickle, лучше воспользоваться `-m pickle`. Однако если файл pickle, который требуется изучить, поступает из ненадёжного источника, `-m pickletools` является более безопасным вариантом, поскольку не выполняет байткод pickle.2021Например, с кортежем `(1, 2)`, сериализованным в файл `x.pickle`:2223```console24$ python -m pickle x.pickle25(1, 2)2627$ python -m pickletools x.pickle28    0: \x80 PROTO      329    2: K    BININT1    130    4: K    BININT1    231    6: \x86 TUPLE232    7: q    BINPUT     033    9: .    STOP34highest protocol among opcodes = 235```3637### Параметры командной строки3839#### `-a, --annotate`4041Аннотирует каждую строку кратким описанием опкода.4243#### `-o, --output=<file>`4445Имя файла, в который должна быть записана информация.4647#### `-l, --indentlevel=<num>`4849Количество пробелов для отступа нового уровня MARK.5051#### `-m, --memo`5253При дизассемблировании нескольких объектов сохранять memo между сеансами дизассемблирования.5455#### `-p, --preamble=<preamble>`5657Когда указано более одного pickle-файла, выводить заданную преамбулу перед каждым дизассемблированием.5859#### `pickle_file`6061Pickle-файл для чтения, или `-` для указания чтения из стандартного ввода.6263## Программный интерфейс6465#### `pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)`6667Выводит символьное дизассемблирование pickle в файлоподобный объект *out*, по умолчанию `sys.stdout`. *pickle* может быть строкой или файлоподобным объектом. *memo* может быть словарём Python, который будет использоваться как memo pickle; его можно использовать для дизассемблирования нескольких pickle-файлов, созданных одним и тем же pickler. Последовательные уровни, обозначенные опкодами `MARK` в потоке, получают отступ в *indentlevel* пробелов. Если *annotate* задано ненулевое значение, каждый опкод в выводе аннотируется кратким описанием. Значение *annotate* используется как подсказка для столбца, с которого должна начинаться аннотация.6869Изменено в версии 3.2: Добавлен параметр *annotate*.7071#### `pickletools.genops(pickle)`7273Предоставляет [итератор](https://python-all.ru/3.14/glossary.html#term-iterator) по всем опкодам в pickle, возвращая последовательность троек `(opcode, arg, pos)`. *opcode* – экземпляр класса `OpcodeInfo`; *arg* – это декодированное значение (как объект Python) аргумента опкода; *pos* – позиция, на которой находится этот опкод. *pickle* может быть строкой или файлоподобным объектом.7475#### `pickletools.optimize(picklestring)`7677Возвращает новую эквивалентную pickle-строку после удаления неиспользуемых опкодов `PUT`. Оптимизированный pickle короче, занимает меньше времени на передачу, требует меньше места при хранении и распаковывается более эффективно.78