python代码块初探

前言

代码块是 python 内部对象的一种组织形式

什么是PyCodeObject

python 编译器在对 .py 源代码编译过程中,对代码块(code block)会编译为 PyCodeObject 对象,那在 python 里面哪些可以算作一个代码块呢?函数,类,模块,都可以当做一个代码块,当编译源文件的时候,这些代码块都会生成与之相对应的 PyCodeObject 对象,并存储在内存中

PyCodeObject 对象查看工具

PyCodeObject 对象查看工具

用这个工具我们可以清楚的看到一个 PyCodeObject 对象中有哪些内容

1
2
3
4
5
6
7
8
9
10
a = 257
b = 257
t_1 = a is b
a = 256
b = 256
t_2 = a is b

# 加载
if __name__ == "__main__":
parseCodeObjectNodeWithPyFile(r"test.py", "result.xml")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<codeobject>
<co_consts count="6">
<item idx="0">-1</item>
<item idx="1">None</item>
<item idx="2">256</item>
<item idx="3">255</item>
<item idx="4">1</item>
<item idx="5">256</item>
</co_consts>
<co_names count="4">
<name idx="0">sys</name>
<name idx="1">dis</name>
<name idx="2">y</name>
<name idx="3">x</name>
</co_names>
<co_varnames count="0"/>
<co_filename>memory_check.py</co_filename>
<co_ename>&lt;module&gt;</co_ename>
<co_nlocals>0</co_nlocals>
<co_stacksize>2</co_stacksize>
<co_argcount>0</co_argcount>
</codeobject>

这个 xml 就是 PyCodeObject 对象了,标明了有多少个变量,多少个常量,这个对象引用次数多少,等信息

坚持原创技术分享,您的支持将鼓励我继续创作!