How to print varible name in python
本问题已经有最佳答案,请猛点这里访问。
我有一个变量
如何打印出变量名,以便让
你要找的是一本字典。
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) |
我们可以为
你可以这么做。
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 |
只有
1 | print next(k for k, v in locals().items() if v == 13) # get variable that is equal to 13 |