python库提供了一个在计算期间记录值的工具

mitschreiben的Python项目详细描述


https://img.shields.io/codeship/f797f980-5b19-0135-2a70-66335668a83b/master.svghttps://readthedocs.org/projects/mitschreiben/badge

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'}

格式化输出

记录可以用不同的格式表示。它的基础是一个字典树, 由类DictTreemitschreiben.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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在SpringMVC中使用单个视图执行所有CRUD操作?   java如何使用DBFlow进行迁移?   导入java。锡兰的朗   安卓在实现Lint自定义检测器时如何调试java源代码?   列表的java字符串格式   java程序基于WebFlux的SSE客户端,具有重新连接功能   java Spring批处理作业读取器持续运行,尽管计划时间为5分钟   java Android Studio在我的代码中没有显示任何错误,但gradle显示了。试一试   java移动JTextArea滚动到插入符号   java选项菜单不工作   爪哇苹果。awt。mac 10.7视网膜上的奇怪行为   java将参数从webmethod(在web服务中)传递到soap处理程序   java如何在Android中使用API调用填充AutoCompleteTextView?   如何使用Selenium和Java从Chrome获取控制台日志   java流收集器。toMap调用toString而不是value   如何在PHP和Java/Play框架应用程序之间共享一个Apache实例?   java Spring引导文件下载zip   Mockito mocked集合中的java类型安全问题