看一个真函数的代码对象

👁️ 3 人浏览 💬 0 人评论 ❤️ 添加收藏

(Python 自己就是「编译成字节码、由 VM 执行」:dis.get_instructions(f) 列出函数 f 的指令,每条有 opname(指令名)和 argval(操作数);f.__code__ 是代码对象,co_varnames 是局部变量名、co_argcount 参数个数、co_names 用到的全局名。不同 Python 版本的指令名会变,本节只看这些稳定的东西。)

看 f 的局部变量、参数个数、全局名,和它有没有比较、有没有跳转:

import dis


def f(a, b):
    x = a + b * 2
    if x > 10:
        return x
    y = x - 1
    return y


ins = list(dis.get_instructions(f))
co = f.__code__
print(str(co.co_varnames).replace(" ", "") + "/" + str(co.co_argcount) + "/" + str(any("JUMP" in i.opname for i in ins)) + "/" + str(any(i.opname == "COMPARE_OP" for i in ins)) + "/" + str([i.argval for i in ins if i.opname == "STORE_FAST"]).replace(" ", ""))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论