如何打印一个字符串一个可调用的对象?



我想应该已经有这样的问题了,但是我没有找到它。这可能是因为我不知道我正在寻找的确切概念/单词,但这里有一个例子:

我有这样的代码:

group_1 = ['Hello', 'world', '!']
group_2 = [1,23,4,2,5,2]
group_3 = ['A', 'K', 'L']
all_groups = [group_1, group_2, group_3]
for i in all_groups:
print(i, ':', len(i))

输出如下:

['Hello', 'world', '!'] : 3
[1, 23, 4, 2, 5, 2] : 6
['A', 'K', 'L'] : 3

这是预期的输出:

'group_1' : 3
'group_2' : 6
'group_3' : 3

如您所见,我正试图打印可调用对象group_1group_2group_3的名称。有什么建议吗?

重构代码,使其使用字典来存储组名。

我不推荐使用任何与反射、inspect模块或locals()相关的方法,如评论中所描述的(或链接到的)。all_groups列表中的变量名在添加到all_groups时不保留;即使它们是,访问这些名称也可能比仅仅使用字典更复杂:

data = {
'group_1': ['Hello', 'world', '!'],
'group_2': [1,23,4,2,5,2],
'group_3': ['A', 'K', 'L']
}
for k, v in data.items():
print(k, ':', len(v))

这个输出:

group_1 : 3
group_2 : 6
group_3 : 3

以下代码:

all_groups = [group_1, group_2, group_3]
for i in all_groups:
print(i, ':', len(i))

接受group_1,group_2group_3这三个变量,并将它们放入一个包含三个项目的列表中。

当您遍历该列表并打印项目时,您将获得它们的值,而不是它们的名称(这是为人类保留的概念,因为否则我们无法理解代码)。

如果要存储它们的名称,则将它们存储在字典中:

all_groups = {
'group_1': group_1,
'group_2': group_2,
'group_3': group_3
}

然后打印他们的名字:

for k,v in all_groups.items():
print(k, ':', len(v))

您可以直接使用globals(),因为为什么不呢:

group_1 = ['Hello', 'world', '!']
group_2 = [1,23,4,2,5,2]
group_3 = ['A', 'K', 'L']
all_groups = ['group_1', 'group_2', 'group_3']
for grp in all_groups:
print(locals()['grp'], ':', len(globals()[grp]))