code_object.py (791B)
1 #!/usr/bin/env python3 2 import dis 3 4 a = 1 5 b = 2 6 7 # source to be compiled into a code object 8 source = 'a + 1' 9 # source = 'a + b' 10 11 # compile code object 12 co = compile(source, '<string>', mode='eval') 13 14 # disassembly columns are: 15 # line_number byte_offset instruction_name argument_value 16 dis.dis(co) 17 18 # names and constants 19 print(f'names: {co.co_names}') 20 print(f'constants: {co.co_consts}') 21 22 # opcodes and opargs in binary 23 print(f'raw binary bytecode: {co.co_code}') 24 h = co.co_code.hex() 25 inst_code = " ".join([h[i:i + 4] for i in range(0, len(h), 4)]).split() 26 print(f'hex representation: {" ".join(inst_code)}') 27 28 for code in inst_code: 29 opcode = f'0x{code[0:2]}' 30 oparg = f'0x{code[2:4]}' 31 print(f'opname lookup: {opcode} -> {dis.opname[int(opcode, 16)]}')