Code对象表示字节编译的可执行Python代码或字节码。
Code对象和函数对象之间的区别在于:
- 函数对象包含对函数的全局变量(定义它的模块)的显式引用,而Code对象不包含上下文
- 默认参数值也存储在函数对象中,而不是存储在Code对象中(因为它们表示在运行时计算的值)。
- 与函数对象不同,代码对象是不可变的,并且不包含(直接或间接)可变对象的引用。
code对象可以用来获取python程序运行过程中的函数名称。
参考链接:
https://docs.python.org/2/reference/datamodel.html#objects-values-and-types
特殊的只读属性:
特殊的只读属性 | 解释 |
---|---|
co_name | 给出函数名称 |
co_argcount | 是位置参数的数量(包括具有默认值的参数) |
co_nlocals | 是函数使用的局部变量数(包括参数) |
co_varnames | 是一个包含局部变量名称的元组(以参数名称开头) |
co_cellvars | 是一个元组,包含嵌套函数引用的局部变量的名称 |
co_freevars | 是一个包含自由变量名称的元组 |
co_code | 是表示字节码指令序列的字符串 |
co_consts | 是一个包含字节码使用的文字的元组。如果Code对象是函数,则co_consts为函数文档字符串,如果没有定义则为None |
co_names | 是包含字节码使用的名称的元组 |
co_filename | 是编译代码的文件名 |
co_firstlineno | 是函数的第一个行号 |
co_lnotab | 是一个字符串,用于编码从字节码偏移到行号的映射 |
co_stacksize | 是所需的堆栈大小(包括局部变量) |
co_flags | 是一个整数,用于编码解释器的许多标志 |
co_flags的标志位:
标志位 | 说明 |
---|---|
0x04 | 使用*arguments语法接受任意数量的位置参数 |
0x08 | 使用**keywords语法接受任意数量的键-值参数 |
0x20 | 函数是生成器 |
0x2000 | 函数是在未来分区启用的情况下编译的 |
0x10与0x1000 | 应用于Python的早期版本 |