py中常常会使用到__code__ .比如闭包中的 x.__code__.co_freevars.
一个__code__ 对应 一个code block.
一个命名空间对应一个__code__ == code block,即模块,类,函数 都自己的__code__.
简单来说:
模块文件产生模块对象,函数是一个对象(class function) , 类是type对象创建的类对象. 一切皆对象;
对象有自己的作用域,即有自己的命名空间 , 每一个命名空间对应一个__code__
def f1(a,b,c,*d, e,f):
localvar = 1
x = '123'
print('co_argcount:' ,f1.__code__.co_argcount) #位置参数个数(a,b,c)
print('co_kwonlyargcount:',f1.__code__.co_kwonlyargcount) #关键字参数个数(e,f)
print('all_local:',f1.__code__.co_nlocals) #函数中局部参数(位置参数+关键字+可变参数(*d) + 本地变量)
print('consts:',f1.__code__.co_consts) #函数内部的常量
print('filename:',f1.__code__.co_filename) #函数所属的文件
print('name:',f1.__code__.co_name) #函数名
print('函数在第几行:',f1.__code__.co_firstlineno)