如何在python中将变量转换为字符串
Posted
技术标签:
【中文标题】如何在python中将变量转换为字符串【英文标题】:How to convert variable into string in python 【发布时间】:2012-02-25 15:23:45 【问题描述】:我有一个类似的问题,但是我不知道这个术语是什么
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
所以我想知道是否有一个实际的方法或函数可以用来检索用作字符串的变量名。
【问题讨论】:
为什么不用python字典? 没有字典有没有办法做到这一点? 相关:***.com/questions/544919/… 为什么要避免使用字典? 【参考方案1】:fadop3 的另一种答案
cat = 5
cat = '%s' % cat
这会将cat
变量转换为字符串。
【讨论】:
【参考方案2】:好吧,使用 f 字符串:
cat = 5
print(f"cat=")
结果:
cat=5
【讨论】:
【参考方案3】:您基本上是在问“我的代码如何发现对象的名称?”
def animal_name(animal):
# here be dragons
return some_string
cat = 5
print(animal_name(cat)) # prints "cat"
来自 Fredrik Lundh 的 quote(在 comp.lang.python 上)特别适合这里。
与您在门廊上找到那只猫的名字的方法相同: 猫(物体)本身不能告诉你它的名字,它也不 真的很在乎——所以找出它叫什么的唯一方法就是问 你所有的邻居(命名空间),如果是他们的猫(对象)……
……如果您发现它有很多名字,请不要感到惊讶, 或者根本没有名字!
只是为了好玩,我尝试使用sys
和gc
模块来实现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']
所以,总结一下:
简短的回答是:你不能。 长答案是:嗯,实际上,您有时可以 - 至少在 CPython 实现中是这样。 To see howanimal_name
is implemented in my example, look here。
正确答案是: 使用dict
,正如其他人提到的那样。当您实际需要使用名称 对象关联时,这是最佳选择。
【讨论】:
我认为可以使用我在某处读到的回溯。我可能会故意导致变量出错并将此错误放入字符串中,然后使用正则表达式检索变量。 一个有趣的想法!如果您使用这种方法取得了一些成功,我很想知道。【参考方案4】:您将变量名称与动物名称的字符串混淆了:
在这里:
cat = 7
cat 是变量,7 是它的值
在:
cat = 'cat'
cat 仍然是变量,'cat' 是带有动物名称的字符串。你可以在 cat 里面放任何你喜欢的字符串,甚至是cat = 'dog'
。
现在回到你的问题:你想打印出动物的名字和对应的数字。
要将姓名和号码配对,最好的选择是使用字典dict
。 和
代表一个字典(在某些情况下也是一个完整的
set
):
d = 3: 'cat', 5: 'dog', 7: 'fish'
d
是你的变量。 3: 'cat', 5: 'dog', 7: 'fish'
是你的字典。 3, 5, 7
是此类字典的键,'cat', 'dog', 'fish'
是对应的值。
现在你需要迭代这本字典。可以拨打d.items()
:
d = 3: 'cat', 5: 'dog', 7: 'fish'
for key,value in d.items():
print(value, key)
我把值颠倒过来了,key order diring print to print the name before the number.
【讨论】:
【参考方案5】:我不会将变量放入列表中,而是将它们放入字典中。
d=
d['cat']=5
d['dog']=3
d['fish']=7
for item in d.keys():
print item+' '+d[item]
【讨论】:
【参考方案6】:使用字典而不是一堆变量。
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]
【讨论】:
【参考方案7】:myAnimals = 'cat':5,'dog':3,'fish':7
animals = ['cat','dog','fish']
for animal in animals:
if myAnimals.has_key(animal): print animal+myAnimals(animal)
【讨论】:
【参考方案8】:我会改为使用字典变量,它可以让您轻松地将字符串名称映射到值。
animalDict['cat'] = 5
animalDict['dog'] = 3
然后您可以通过按键进行交互并打印出您想要的内容。
【讨论】:
以上是关于如何在python中将变量转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章