Eval(功能)混乱

时间:2012-05-26 20:31:42

标签: python

这是我的代码:

import random
a=random.randrange(100,400)
b=0
c=100
d=200
e=300
f=400
g=500
points =("b","c","d","e","f","g")
randomadd=random.randrange(1,500)
linepoints2=(b,305),(c,a),(d,305),(e,305),(f,a),(g,305),(g,300),(f,a+5),(e,300),(d,300),(c,a+5),(b,300)
thingy=points[random.randrange(1,len(points))]
eval(thingy) +=100

我想eval()thingy因为我认为它会工作,因为它返回一个字符串,但显然你不能eval()函数调用,我不知道如何解决这个请帮助...

4 个答案:

答案 0 :(得分:2)

thingy 不是一个函数,是一个字符串,因此您无法将其评估为函数。如果一个函数,你可以这样评价:

eval("thingy()")

你想做什么?代码令人困惑,也许你正在尝试做别的事情,但你做的方式是错误的。

编辑:

现在很清楚你打算做什么,我可以建议你使用字典,它可以作为一个“变量”(不需要 eval 任何东西,这不是正确的方法解决你的问题):

d = {}
d[thingy] = 100
d[thingy] += 200
d[thingy]
> 300

答案 1 :(得分:1)

呃,你想在这做什么?

# bad
eval(thingy) +=100

转换为:

# bad
eval(thingy) = eval(thingy) + 100

你不能分配给一个函数调用(我认为 是你得到的错误)。

您可以执行以下操作:

# good
result = eval(thingy) + 100

这似乎完美无缺(结果= 400)。

答案 2 :(得分:1)

由于您的某条评论建议您想要修改原始变量,因此请尝试使用此代替eval()

vars()[thingy]+=100

ZyX建议使用locals()

locals()[thingy]+=100

答案 3 :(得分:0)

更好 - 完全避免使用eval()。尝试

from random import randrange, choice

points = (
    randrange(100,400),
    0,
    100,
    200,
    300,
    400,
    500
)

result = choice(points) + 100