python库提供了一个在计算期间记录值的工具
mitschreiben的Python项目详细描述
Mitschreiben(德语“to take notes”)帮助在 用于以后评估的计算,例如检查正确的对象或 使用值或在表格结构中显示结果
它提供了一个名为record的类,它基本上用于所有东西。它授予对记录对象的访问权 对于录制,它是一个上下文管理器,用于触发是否录制。
示例用法
在第一个Record(key = value)或Record(dictionary)中 记录一个值。使用该类提供的装饰符Prefix。 定义一个密钥扩展名,在该扩展名下记录的值将存储在 Record。前缀是堆叠的,所以当 函数调用另一个以这些前缀为前缀的函数 连接。
frommitschreibenimportRecorddefmagical_stuff_happens(baz,barz):return"That's","great"classFoo():@Record.Prefix()defbar(self,baz,barz)some_value1,some_value2=self.do_something(baz,barz)Record(a_key=some_value1,another_key=some_value2)returnsome_value1,some_value2@Record.Prefix()defdo_something(self,baz,barz):a_dict={'again_a_key':baz,'so_creative':barz}Record(a_dict)returnmagical_stuff_happens(baz,barz)def__repr__(self):return"Foo({})".format(id(self))
现在,由于Record是ContextManager,因此录制将只 在这样的背景下发生。with-语句激活记录并返回当前scopes record对象 方便出入。另一件事是,这个语句增加了记录级别,从而导致记录对象 仅在该范围内可用。当离开with时,外部作用域的记录将由内部作用域扩展 首先,将外部记录的当前前缀堆栈前置到内部记录的每个键。
withRecord()asrec:foo=Foo()foo.do_something("baz","barz")foo.bar("baz","barz")printrec.entries
条目是一个dict,它的键是元组,元组是堆叠的前缀。这样就可以确定在哪个方法上调用了哪个对象,然后 对于连续的调用,最后记录一个值。上面的示例具有以下输出。
{('Foo(42403656).do_something','again_a_key'):'baz',('Foo(42403656).bar','Foo(42403656).do_something','again_a_key'):'baz',('Foo(42403656).do_something','so_creative'):'barz',('Foo(42403656).bar','a_key'):"That's",('Foo(42403656).bar','another_key'):'great',('Foo(42403656).bar','Foo(42403656).do_something','so_creative'):'barz'}
格式化输出
记录可以用不同的格式表示。它的基础是一个字典树, 由类DictTree在mitschreiben.formatting中实现。然而,对于两个基本输出,一个 不需要亲自实例化DictTree。相应的方法是
这两种方法都生成输出表。其思想是,某些计算是用不同的 对象,导致相同的关键字。所以我们得到一个包含行键(对象名)和列键(关键字)的表 用于记录值)。正如前面方法的名称所示,它生成这个表并将其作为单个表写入 .csv文件放入Path,而后者构造一个html文档,在该文档中可以浏览树结构 看看那些放在树上的桌子。这些表格看起来类似于
<divclass='panel-elem'><table><trclass='headrow'><thcolspan='5'>table</th></tr><trclass='bodyrow'><th></th><th>a_key</th><th>again_a_key</th><th>another_key</th><th>so_creative</th></tr><trclass='bodyrow'><th>Foo(42403656).bar</th><td>That's</td><td>None</td><td>great</td><td>None</td></tr><trclass='bodyrow'><th>Foo(42403656).do_something</th><td>None</td><td>baz</td><td>None</td><td>barz</td></tr></table></div><divclass='panel'><divclass='panel-elem'><table><trclass='headrow'><thcolspan='2'>table</th></tr><trclass='bodyrow'><th></th><th>Foo(42403656).do_something</th></tr><trclass='bodyrow'><th>again_a_key</th><td>baz</td></tr><trclass='bodyrow'><th>so_creative</th><td>barz</td></tr></table></div>
另一种方法是直接使用DictTree。
frommitschreiben.formattingimportDictTreeDT=DictTree(rec.entries)tables=DT.make_tables()fortintables:printt.pretty_string()print
这将产生以下输出。第一个表代表顶部 记录的级别,而其他选项卡的命名方式是 object.function。
Values | a_key | again_a_key | another_key | so_creative Foo(42403656).bar | That's | None | great | None Foo(42403656).do_something | None | baz | None | barz Foo(42403656).bar Values | again_a_key | so_creative Foo(42403656).do_something | baz | barz