我想应该已经有这样的问题了,但是我没有找到它。这可能是因为我不知道我正在寻找的确切概念/单词,但这里有一个例子:
我有这样的代码:
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_1
、group_2
和group_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_2
和group_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]))