将列表打印为变量值

时间:2015-12-07 18:51:04

标签: python variables reflection

我如何打印字符串列表作为其各自的变量值?

例如,请使用以下代码:

a=1
b=2
c=3
text="abc"
splittext = text.split(text)
print(splittext)

如何输出123

2 个答案:

答案 0 :(得分:3)

您可以使用eval执行此操作,但非常危险

>>> ''.join(map(lambda x : str(eval(x)),Text))
'123'

eval(或许他们最好将其重命名为evil,没有任何难过的感觉,只需将其用作警告)评估字符串,就像您自己编写它一样。因此eval('a')将获取a的值。问题是,黑客可能会找到一些技巧来使用它来注入任意代码,从而破解你的服务器,程序等。此外,它可能会改变程序的状态。所以一条建议是“不要使用它,除非你绝对没有其他选择”(这不是这里的情况)。

或者一个不那么危险的变种:

>>> ''.join(map(lambda x : str(globals()[x]),Text))
'123'

如果这些是全局变量(您可以将locals()用于局部变量)。

这是丑陋并且很危险,因为你事先并不知道abc是什么,你也没有太多控制权程序的哪个部分可以设置这些变量。所以它可能允许代码注入。正如您对问题的评论中所做的那样,您最好使用字典。

字典方法

更好的方法是使用字典(如@Ignacio Vazquez-Abrams所说):

>>> dic = {'a':1,'b': 2,'c':3}
>>> ''.join(map(lambda x : str(dic[x]),Text))
'123'

列出而不是字符串

在上面我们使用lambda-expression中的str将内容转换为字符串,并使用''.join来连接这些字符串。如果您对一系列“结果”感兴趣,可以删除这些结构。例如:

>>> map(lambda x : dic[x],Text)
[1, 2, 3]

对于上述所有例子都是一样的。

修改

出于某种原因,我后来发现你要打印 valuesm这一事实,这可以通过list comprehension轻松实现:

for x in Text :
    print dic[x]

再次,您可以对上述情况使用相同的技术。

答案 1 :(得分:2)

如果您想要打印出字符串中指定的变量的值,可以使用locals(或globals,具体取决于您希望它们的位置/地点)

>>> a=1
>>> b=2
>>> c=3
>>> s='abc'
>>> for v in s:
...  print(locals()[v])
... 
1
2
3

或者,如果在字符串中使用分隔符

>>> s='a,b,c'
>>> for v in s.split(','):
...  print(locals()[v])
... 
1
2
3