hongweipeng 发布的文章

Python内核阅读(十三): 函数对象和函数调用


起步

python中, 任何东西都是一个对象, 函数也不例外, 函数对象结构 PyFunctionObject :

[functionobject.h]
typedef struct {
    PyObject_HEAD
    PyObject *func_code;        // 编译后的 PyCodeObject 对象
    PyObject *func_globals;     // 运行时的global名字空间
    PyObject *func_defaults;    // 默认参数(tuple or null)
    PyObject *func_kwdefaults;  // 带声明的参数默认值 dict or null
    PyObject *func_closure;     // 闭包函数集合, null or tuple
    PyObject *func_doc;         // 函数的文档 PyStringObject
    PyObject *func_name;        // 函数名, __name__ 属性, 是PyStringObject对象
    PyObject *func_dict;        // 函数的 __dict__ 属性, PyDictObject 或 null
    PyObject *func_weakreflist; 
    PyObject *func_module;      // 函数的__module__ ,可以是任意对象
    PyObject *func_annotations; // 注释, null or dict
    PyObject *func_qualname;    /* The qualified name */
} PyFunctionObject;