python - 是否有与 Raku 的 dd 等效的 Python(即“小数据转储器”)?
问题描述
我想通过检查多个变量来调试我的 Python 代码,输出它们的名称和内容,相当于 Raku dd
(Raku 以前称为“Perl 6”):
我发现的最接近的已经在另一篇文章中提到,它将 Pythonpprint
与 Perl 5进行了比较Data::Dumper
。但是,与 不同dd
的是,它们都不输出变量的名称。dd
在 Raku 中最接近show
Perl 5 模块中的函数Data::Show
,除了show
额外输出文件名和行号。
这是 Raku 的dd
实际演示:
#!/bin/env perl6
my %a = ( :A(1), :B(2) );
my %c = ( :C(3), :D(4) );
dd %a;
dd %c;
运行时,结果如下:
Hash %a = {:A(1), :B(2)} Hash %c = {:C(3), :D(4)}
(顺便说一下,Hash
Perl 或 Raku 中的 a 相当于 Python 中的字典)
这是我在 Python 中最接近的版本,但它冗余地需要变量的名称和变量本身:
#!/usr/bin/env python
def tiny_dd(name,x):
print(name + ' is "' + str(x) + '"')
a = { 'A':1, 'B':2}
c = { 'C':3, 'D':4}
tiny_dd('a',a)
tiny_dd('c',c)
运行时,结果如下:
a is "{'A': 1, 'B': 2}" c is "{'C': 3, 'D': 4}"
解决方案
在打印一个值时重复一个名称两次通常会让那些认为变量具有唯一值的人感到厌烦。然而,在 Python 中,通常很难找到引用特定值的名称,这使得编写像您正在寻找的打印机那样的打印机非常困难,因为您需要在名称空间周围进行一些非常昂贵的检查。
也就是说,PySnooper已经为您完成了所有这些繁重的工作,并且可以打印出关于程序如何运行的大量信息,这对于调试非常有用。
请注意,在 Python 3.8 中,您几乎可以使用 f strings 的新=
语法获得所需的内容,其工作方式如下(从发行说明中复制):
>>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"
推荐阅读
- rest - 向 TRESTClient 添加标头时防止值的 URL 编码
- ios - Safari 的应用程序扩展有多少功能?iOS
- c# - C#,将数组列表转换/加入单个数组
- codeigniter - Codeigniter 3 加入一张表
- laravel - 搜索内联背包 laravel 不起作用,
- ios - 将 Realm SWIFT 数据分离到列表中——然后将数据重新组合在一起?
- java - Android MediaCodec(TextureView)无法通过搜索栏搜索()
- google-ads-api - Google Ads 脚本 AWQL“CONTAINS_ANY”运算符不起作用
- laravel - 缺少必需的参数 - 具有超过 2 个参数的路由不适用于本地化
- python - 在不同的轴上绘图