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

how to convert variable into string in python

我也有类似的问题,但是我不知道这个词是什么。

1
2
3
4
5
6
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

它会打印出来,

1
2
3
cat5
dog3
fish7

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

编辑:

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


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

1
2
3
4
5
6
def animal_name(animal):
    # here be dragons
    return some_string

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

Fredrik Lundh(在comp.lang.python上)的一句话在这里特别合适。

The same way as you get the name of that cat you found on your porch:
the cat (object) itself cannot tell you its name, and it doesn’t
really care — so the only way to find out what it’s called is to ask
all your neighbours (namespaces) if it’s their cat (object)…

….and don’t be surprised if you’ll find that it’s known by many names,
or no name at all!

为了好玩,我尝试使用sysgc模块来实现animal_name,发现邻里也在用几个名字来称呼你亲切地称为"cat"的对象,即字面整数5:

1
2
3
4
5
6
7
>>> 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']

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

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

因此,总结如下:

  • 简短的回答是:你不能。
  • 答案很长:实际上,你可以……至少在cpython实现中。要了解如何在我的示例中实现animal_name,请看这里。
  • 正确的答案是:使用dict,正如其他人在这里提到的。当您实际需要知道名称<->对象关联时,这是最佳选择。


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

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

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

请注意,它们可能不会(可能不会)按照您输入的顺序输出。您可以使用collections.ordereddict来解决这个问题,如果您只需要按照一致的顺序对密钥进行排序,也可以只对它们进行排序:

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


您将变量名与动物名的字符串混淆:

在这里:

1
cat = 7

cat是变量,7它的值

在:

1
cat = 'cat'

cat仍然是变量,"cat"是带有动物名称的字符串。你可以把任何你喜欢的绳子放在猫里面,甚至是cat = 'dog'

现在回到你的问题上来:你要打印出一个动物的名字和一个对应的号码。

要对名称和数字进行配对,最好的选择是使用dict字典。{}代表一个dict(在某些情况下,也可以是set)。

1
d = {3: 'cat', 5: 'dog', 7: 'fish'}

d是您的变量。{3: 'cat', 5: 'dog', 7: 'fish'}是你的字典。3, 5, 7是该字典的键,'cat', 'dog', 'fish'是对应的值。现在你需要重复这本字典。可以调用d.items()

1
2
3
d = {3: 'cat', 5: 'dog', 7: 'fish'}
for key,value in d.items():
    print(value, key)

我把值倒过来,按顺序打印,把名字印在号码前。


我不把变量放在列表里,而是把它们放进字典里。

1
2
3
4
5
6
7
d={}
d['cat']=5
d['dog']=3
d['fish']=7

for item in d.keys():
  print item+' '+d[item]

1
2
3
4
myAnimals = {'cat':5,'dog':3,'fish':7}
animals = ['cat','dog','fish']
for animal in animals:
    if myAnimals.has_key(animal): print animal+myAnimals(animal)

我将改为使用字典变量,它可以让您轻松地将字符串名称映射为值。

1
2
animalDict['cat'] = 5
animalDict['dog'] = 3

然后你可以通过按键进行交互并打印出你想要的。