我如何检测或捕获python中全局变量的值变化

variable = 10
print(variable)
variable = 20
# Detect changes to the value using a signal to trigger a function

更新
AST 文档 - 好介绍
https://greentreesnakes.readthedocs.io/en/latest/

最佳答案

如何检测字节码以在每个存储到全局变量的语句之前添加打印语句。下面是一个例子:

from bytecode import *

def instr_monitor_var(func, varname):
    print_bc = [Instr('LOAD_GLOBAL', 'print'), Instr('LOAD_GLOBAL', varname),
                Instr('CALL_FUNCTION', 1), Instr('POP_TOP')]

    bytecodes = Bytecode.from_code(func.__code__)
    for i in reversed(range(len(bytecodes))):
        if bytecodes[i].name=='STORE_GLOBAL' and bytecodes[i].arg==varname:
            bytecodes[i:i]=print_bc

    func.__code__=bytecodes.to_code()

def test():
    global a
    a = 1
instr_monitor_var(test, 'a')
test()
instr_monitor_var 可以检测函数 test,因此全局变量 a 将在其值更改时打印出来。让我知道这个是否奏效。谢谢!

关于python - 捕获python中全局变量值的变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59675250/

10-12 17:05