Python源码学习(六)-PyCodeObject初探
demo1.py
def f(): c=1 print("Hello") a=9 b=5 f();
co.py
source = open('demo1.py').read() co = compile(source, 'demo1.py', 'exec') print("type:") print(type(co)) print("dir(co)") print(dir(co)) print("co.co_name:" + co.co_name) print("co.co_names:") for i in co.co_names: print(i) print("-" * 30) print("co.co_code:") print(co.co_code) print("-" * 30) print("co.co_consts:") for i in co.co_consts: print(i) print("-" * 30) print("co.co_filename:") print(co.co_filename) print("-" * 30) print("co.nlocals:") print(co.co_nlocals) print("-" * 30) print("co.co_stacksize:") print(co.co_stacksize) print("co.co_lnotab;") print(co.co_lnotab) print("-" * 30) print("co.co_varnames:") for i in co.co_varnames: print(i)
结果
type: <class 'code'> dir(co): ['__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_kwonlyargcount', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames'] co.co_name:<module> co.co_names: f a b ------------------------------ co.co_code: b'd\x00\x00\x84\x00\x00Z\x00\x00d\x01\x00Z\x01\x00d\x02\x00Z\x02\x00e\x00\x00\x83\x00\x00\x01d\x03\x00S' ------------------------------ co.co_consts: <code object f at 0x00C0D2F0, file "demo1.py", line 1> 9 5 None ------------------------------ co.co_filename: demo1.py ------------------------------ co.nlocals: 0 ------------------------------ co.co_stacksize: 1 co.co_lnotab; b'\t\x04\x06\x01\x06\x01' ------------------------------ co.co_varnames: