如何在python中将变量转换为字符串

8 投票
9 回答
70473 浏览
提问于 2025-04-17 12:13

我遇到了一个跟这个类似的问题,不过我不知道这个术语是什么。

cat = 5
dog = 3
fish = 7
animals= [cat, dog, fish]
for animal in animals:
    # by animal name, I mean the variable name that's being used
    print(animal_name + str(animal))

它应该输出

cat5
dog3
fish7

所以我在想,有没有什么方法或者函数可以用来获取正在使用的变量名,并把它当作字符串返回呢?

9 个回答

2

好吧,使用 f-strings 来处理:

cat = 5

print(f"{cat=}")

结果是:

cat=5

5

用字典来代替一堆变量。

animals = dict(cat=5, dog=3, fish=7)

for animal, count in animals.iteritems():
    print animal, count

请注意,它们的顺序可能和你放进去时不一样(很可能不会保持原来的顺序)。如果你想要保持顺序,可以使用 collections.ordereddict,或者如果你只是想要它们按一致的顺序排列,可以直接对键进行排序:

for animal in sorted(animals.keys()):
    print animal, animals[animal]
16

你基本上是在问:“我的代码怎么能找到一个对象的名字?”

def animal_name(animal):
    # here be dragons
    return some_string

cat = 5
print(animal_name(cat))  # prints "cat"

这里引用Fredrik Lundh在comp.lang.python上的一段话,特别合适。

就像你发现的那只猫,你想知道它的名字:这只猫(对象)自己不能告诉你它的名字,而且它其实也不在乎——所以唯一的方法就是问问你所有的邻居(命名空间),看看这只猫(对象)是不是他们的……

……而且不要惊讶,如果你发现它有很多名字,或者根本没有名字!

为了好玩,我尝试用sysgc模块来实现animal_name,发现邻居们也在用好几个名字叫你亲切称呼的“猫”,也就是字面上的整数5:

>>> cat, dog, fish = 5, 3, 7
>>> animal_name(cat)
['n_sequence_fields', 'ST_GID', 'cat', 'SIGTRAP', 'n_fields', 'EIO']
>>> animal_name(dog)
['SIGQUIT', 'ST_NLINK', 'n_unnamed_fields', 'dog', '_abc_negative_cache_version', 'ESRCH']
>>> animal_name(fish)
['E2BIG', '__plen', 'fish', 'ST_ATIME', '__egginsert', '_abc_negative_cache_version', 'SIGBUS', 'S_IRWXO']

对于一些独特的对象,有时候你确实可以得到一个独特的名字:

>>> mantis_shrimp = 696969; animal_name(mantis_shrimp)
['mantis_shrimp']

所以,总结一下:

撰写回答