在Python中使用globals()打印

在Python中使用globals()打印,python,Python,我正在尝试打印每个数据集的形状,但它没有按我希望的那样打印 for i in train_set, train_labels, test_set, test_labels: name = [x for x in globals() if globals()[x] is i][1] print("The {0} shape is {1}".format(name, i.shape)) 输出为: i形为(1700,20) i形为(1700,) i形为(300,2

我正在尝试打印每个数据集的形状,但它没有按我希望的那样打印

for i in train_set, train_labels, test_set, test_labels:
    name = [x for x in globals() if globals()[x] is i][1]
    print("The {0} shape is {1}".format(name, i.shape))
输出为:

i形为(1700,20)

i形为(1700,)

i形为(300,20)

i形为(300,)


“i”的值没有被替换。有人能告诉我这有什么问题吗:

如果这只是为了调试或状态信息,下面是正确的方法:

for name,table in (
    ('train_set', train_set),
    ('train_labels', train_labels),
    ('test_set', test_set),
    ('test_labels', test_labels) ):
    print("The {0} shape is {1}".format(name, table.shape)
如果您需要的名称不仅仅限于此,那么不要在单个变量中创建它们:

data['train_set'] = train_set
data['train_labels'] = train_labels
data['test_set'] = test_set
data['test_labels'] = test_labels

现在,您将名称和表放在一个方便的位置。

添加另一个条件以忽略任何名为
i
的全局变量:
[x代表全局变量中的x(),如果全局变量()[x]是i和x!='i']
第一次通过循环,则
i
训练集
都将通过
thing is i
测试。你似乎认为这些将按字母顺序交付。如果您运行的是Python2.7,则不是这样。总的来说,这段代码是非常糟糕的实践。如果您需要按名称引用这些内容,请将它们存储在字典中:
名称['train\u set']
名称['train\u labels']
,等等。这样就很容易了。@Tim Roberts有更好的方法写上面的内容吗?我只是想不要重复太多的书面陈述