如果在python中使用eval,如何使用eval

时间:2014-02-24 22:25:06

标签: python

我有一个全局变量1,2,3 ......我有一个变量“num”(它是一个字符串)可以是“一个”或“两个”或“三个”...我想要做下一件事:

if num == "one":
   one = True
elif num=="two":
   two = True
elif num=="three":
   three = True
...

在perl中我可以使用1行:类似eval“$ num = True”而不是上面的long if。我怎么能在python中做到这一点?

3 个答案:

答案 0 :(得分:8)

您可以使用globals()作为字典访问全局名称:

globals()[num] = True

但您通常希望将数据保留在变量名称之外。在这里使用字典而不是全局字符:

numbers = {'one': False, 'two': False, 'three': False}

numbers[num] = True

或者也许是一个对象:

class Numbers:
    one = two = three = False

numbers = Numbers()

setattr(numbers, num, True)

答案 1 :(得分:0)

Eval是相当危险的,所以就像全局()我提供了一个稍微更优质的解决方案。

如果您想构建一个字典,其中您的密钥是“一个”,“两个”等......并且值为False。那么你需要做的就是:

if num in switch_dict:
    switch_dict[num] = True

然后,要获得有意义的数据,您需要做的就是

print switch_dict[num]

或控制流程

if switch_dict[num]:
    <do stuff>

答案 2 :(得分:0)

虽然最有可能的是,有better ways可以完成你正在尝试的任何事情,但这是如何:

one, two, three = False, False, False
print "before:", one, two, three  # before: False False False
num = "two"
eval("globals().update({%r: True})" % num)
print " after:", one, two, three  #  after: False True False