我如何检测或捕获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/