Closed Saltsmart closed 2 years ago
跟踪变量是一个非常大而且非常困难的话题,它设计到了变量的保存、复制和比较,做一个generic的增量变化检查本身就是一个很大的项目,远超objprint
的功能范围了。你可以看一下我另一个项目watchpoints里面的代码,还是很复杂的。
我们随便举个例子,这个变量本身可能保存了其他的object,它里面的attribute可能增加了减少了改变了,改变的话可能变化在第N层(比如obj.a.b.c.d变了),这种改变未必能通过==
发现(自定义数据结构不一定定义了__eq__
,即便定义也未必符合你的期待)。你会发现这个层级的问题,它就不是objprint
应该尝试解决的问题了。
如果你觉得你这个跟踪的情况,由于你代码本身的制约,它是比较有规律的,你完全可以自己去追踪哪个attribute有了变化(自己试一下也没准可以感受到这个任务的复杂程度),然后返回一个attribute list,再用objprint
的include
argument去打印
# 类似这样
changed_attributes = obj.get_changed_attributes()
op(obj, include=changed_attrubutes)
objprint
的功能是“打印”,它的功能拓展是“打印什么”,“怎么打印”,而不是“追踪要打印的内容”。
谢谢您! 今天看了您讲“如何提问”的方法(bilibili),感觉也很有教益!
您好!我正在使用objprint跟踪迭代过程,代码大致如下:
已知obj中有些变量在执行step后是不发生改变的,在第二次到最后一次调用op时,是否能够不打印这些变量?也就是只打印发生了变化的变量?