[ python codeobject ]


一. 1.所有python写的代码都被变异成了codeobject

print(f.__code__)

co_code保存真正的byte code 使用二进制保存的,通俗表达也能理解为他的汇编, 不一般使用dis.dis()来查看汇编

code = f.__code__
code.co_code

二. co_name 函数名字 co_filename 文件的路径 co_lnotab maping 每一个字节码对应的源代码,对应的行数

co_argcount # 参数数量, 函数重载机制相关(除了, *)之外的传参

co_posonlyargcount 函数定义的不用制定key名字的传参数量 co_kwonlyargcount 函数定义的是必须要制定key来传参的参数数量

def a(a,b=1, /, *age,**kwargs)

三.

def f(a):
    b = a
    return b

code = f.__code__
code.co_nlocals # 2 , 局部变量数量
code.co_names # ('a', 'b')
co_cellvars # ()
code_freevars # ()
code_consts # (None,)

查看函数的字节码

dis.dis(f)

co_cellvars 我这个闭包里面 自己使用的变量 co_freevars 闭包别人在我这里使用的变量