32.13. pickletools
—为pickle开发者的工具¶
源代码: Lib/pickletools.py
该模块包含与 pickle
模块的详细细节相关的各种常量,关于实现的一些冗长的评论以及用于分析pickled数据的一些有用的功能。这个模块的内容对于正在使用 pickle
的Python核心开发人员非常有用;普通用户的 pickle
模块可能找不到 pickletools
模块相关。
32.13.1. 命令行用法¶
3.2 新版功能.
当从命令行调用时,python -m pickletools
将反汇编一个或多个pickle文件的内容。注意,如果你想看到存储在pickle中的Python对象而不是pickle格式的细节,你可能想使用 -m pickle
。但是,当要检查的pickle文件来自不受信任的源时,-m pickletools
是一个更安全的选项,因为它不执行pickle字节码。
例如,使用在文件 x.pickle
中pickling的元组 (1, 2)
:
$ python -m pickle x.pickle
(1, 2)
$ python -m pickletools x.pickle
0: \x80 PROTO 3
2: K BININT1 1
4: K BININT1 2
6: \x86 TUPLE2
7: q BINPUT 0
9: . STOP
highest protocol among opcodes = 2
32.13.2. 程序接口¶
-
pickletools.
dis
(pickle, out=None, memo=None, indentlevel=4, annotate=0)¶ 将腌汁的符号反汇编输出到类文件对象 out,默认为
sys.stdout
。 pickle 可以是字符串或类似文件的对象。 memo 可以是将被用作pickle的备忘录的Python字典;它可以用于在由相同的拾取器创建的多个腌汁之间执行拆卸。由流中的MARK
操作码指示的连续级别由 indentlevel 空间缩进。如果向 annotate 给出非零值,则输出中的每个操作码都用短描述注释。 annotate 的值用作注释应该开始的列的提示。3.2 新版功能: annotate 参数。
-
pickletools.
genops
(pickle)¶ 在pickle中的所有操作码上提供 iterator,返回一系列
(opcode, arg, pos)
三元组。 opcode 是OpcodeInfo
类的一个实例; arg 是操作码参数的解码值,作为Python对象; pos 是此操作码所在的位置。 pickle 可以是字符串或类似文件的对象。
-
pickletools.
optimize
(picklestring)¶ 删除未使用的
PUT
操作码后返回一个新的等效pickle字符串。优化的泡菜更短,需要更少的传输时间,需要更少的存储空间,更有效地解开。