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

the*_*ost 3 python string variables

我有类似的问题,但我不知道这个术语是什么

cat=5
dog=3
fish=7
animals=[cat,dog,fish]
for animal in animals:
    print animal_name+str(animal)  #by animal name, i mean the variable thats being used
Run Code Online (Sandbox Code Playgroud)

它会打印出来,

cat5
dog3
fish7
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有一个实际的方法或函数可以用来检索正在使用的变量并将其转换为字符串.希望这可以在不为每只动物实际创建字符串的情况下完成.

编辑:

没有字典有没有办法做到这一点?

wim*_*wim 12

您基本上问"我的代码如何发现对象的名称?"

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

cat = 5
print(animal_name(cat))  # prints "cat"
Run Code Online (Sandbox Code Playgroud)

一个报价从弗雷德里克Lundh开发(在comp.lang.python)是特别适合在这里.

就像你得到你在门廊上找到的那只猫的名字一样:猫(物体)本身不能告诉你它的名字,而且它并不真正关心 - 所以找出它叫什么的唯一方法就是问所有邻居(名称空间)如果是他们的猫(对象)......

......如果你发现它被许多名字所知,或者根本没有名字,也不要感到惊讶!

为了好玩,我尝试animal_name使用sysgc模块实现,并发现邻居也调用了你亲切地称为"cat"的对象,即文字整数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']
Run Code Online (Sandbox Code Playgroud)

对于足够的唯一对象,有时你可以得到一个唯一的名称:

>>> mantis_shrimp = 696969; animal_name(mantis_shrimp)
['mantis_shrimp']
Run Code Online (Sandbox Code Playgroud)

所以,总结一下:


kin*_*all 5

使用字典而不是一堆变量.

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

for animal, count in animals.iteritems():
    print animal, count
Run Code Online (Sandbox Code Playgroud)

请注意,它们可能不会(可能不会)以您放入它们的顺序出现.您可以使用collections.ordereddict或只是通过对键进行排序来解决这个问题,如果您只是按照一致的顺序需要它们:

for animal in sorted(animals.keys()):
    print animal, animals[animal]
Run Code Online (Sandbox Code Playgroud)