如何在python中打印变量名

How to print varible name in python

本问题已经有最佳答案,请猛点这里访问。

我有一个变量fruit = 13,当我print(fruit)时,我得到13

如何打印出变量名,以便让'fruit'打印出来?我不想使用print('fruit'),因为我将使用函数。


你要找的是一本字典。

1
2
3
4
food = {'fruit':13, 'vegetable':15}

for item in food:
    print(item, food[item])

结果:

1
2
fruit 13
vegetable 15


虽然有很多方法可以做到这一点(我个人认为字典就是你想要的),但我想解释一下为什么很多人都在犹豫,因为从表面上看,这似乎是一项相当合理的任务。

但这在Python(以及我能想到的大多数其他语言)中如此困难是有原因的。原因是,在大多数情况下,人们可以把变量名看作是头脑中真实的、潜在的含义的简写。大多数语言的设计理念是,更改速记不应更改代码的输出。

假设您有这样的代码:

1
2
fruit = 10
print('Amount of fruit', fruit)

我们可以为fruit选择一百万个名称——fruit_quantitynum_fruits等,但变量代表的一个基本概念是:水果的数量。因此,如果您想要一个数字标签,请使用基础概念的名称。


你可以这么做。

1
2
3
4
5
6
7
8
9
10
11
12
13
print [n for n in globals() if globals()[n] is fruit][0]

>>> fruit = 13
>>> n = None
>>> print [n for n in globals() if globals()[n] is fruit][0]
fruit
>>> b = None
>>> b = [n for n in globals() if globals()[n] is fruit][0]
>>> b
'fruit'
>>> type(b)
<type 'str'>
>>>

如果愿意的话,也可以像这样从命名空间中的变量中创建一个对象。

1
b = {globals()[n]: n for n in globals() if globals()[n] is fruit}

然后,您可以通过该对象的值来获取名称文本。

1
print b[fruit]

输出:

1
2
3
4
5
6
7
>>> b = {globals()[n]: n for n in globals() if globals()[n] is fruit}
>>> b
{13: 'fruit'}
>>> fruit
13
>>> b[fruit]
'fruit'

您可以通过使用字典和循环迭代来实现类似的行为:

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
# coding: utf-8

# define a dict with sample data
d = {'fruit': 13}

# print keys and values of sample dict
for key, val in d.items():
    print(key, val)

输出如下:

1
fruit 13


只有printlocals字典中的next键具有所需的值。以下13为数值:

1
print next(k for k, v in locals().items() if v == 13) # get variable that is equal to 13