本文参考Python源码剖析第11章:
python中函数就是一个对象,函数这种抽象机制是通过PyFunctionObject这个对象来实现的。
对比PyCodeObject与PyFunctionObject:前者是对一段Python源代码的静态表示,它包含了一个Code Block的静态信息,而后者是python执行def语句时动态创建的,在PyFunctionObject中也会包含一些函数的静态信息,存储在func_code中,另外还有一些函数执行时候的动态信息,比如上下文信息func_globals. 一段python代码中可能对应多个PyFunctionObject对象。
在Python中很奇特地将函数的声明与实现分离。从虚拟机的角度看,def f()其实是函数对象的创建语句,当执行这个语句时,会动态创建一个