如何用python编写此评估?
我想用给定的列表对下面的如何用python编写此评估?,python,eval,Python,Eval,我想用给定的列表对下面的dicty1~y10[name]进行赋值 我知道使用eval(self.y$I[name])=value是错误的,但我应该如何在python中做到这一点 class excel: def __init__(self): self.base_year = 2004 self.y1 = {'year':self.base_year} self.y2 = {'year':self.base_year + 1}
dict
y1~y10[name]
进行赋值
我知道使用eval(self.y$I[name])=value
是错误的,但我应该如何在python中做到这一点
class excel:
def __init__(self):
self.base_year = 2004
self.y1 = {'year':self.base_year}
self.y2 = {'year':self.base_year + 1}
self.y3 = {'year':self.base_year + 2}
self.y4 = {'year':self.base_year + 3}
self.y5 = {'year':self.base_year + 4}
self.y6 = {'year':self.base_year + 5}
self.y7 = {'year':self.base_year + 6}
self.y8 = {'year':self.base_year + 7}
self.y9 = {'year':self.base_year + 8}
self.y10 = {'year':self.base_year + 9}
def value(self, name, value_list):
for value, i in value_list, range(1, 10):
eval(self.y$i[name]) = value
list = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ]
e1.value('test', list)
当
getattr
执行以下操作时,无需使用eval
:
getattr(self, 'y%u' % i)[name] = value
但最好把你的y列入一份清单。因此,您可以:
self.y[i][name] = value
在日常任务中使用内省&c的诱惑是一种强烈的代码气味,这意味着重新思考您的方法——正如其他人所提到的,在这里,制作
self.y
一个dicts
列表是一个更好的主意。不过,您的代码中还需要其他修复
class excel:
def __init__(self):
self.base_year = 2004
self.y = [{'year':self.base_year+i} for i in range(10)]
def value(self, name, value_list):
for i, value in enumerate(value_list):
self.y[i][name] = value
是的,这个
self.y
是base-0(0到9)--这在编程中不可避免地要简单得多,而且简单是一个非常宝贵的优点,我不想放弃它…我和Kevin或Dan D一样不喜欢使用eval来实现这一点。但是要回答您的问题,您可以使用:
yi = eval( "self.y{0}".format(i) )
yi[name] = value;
eval()函数计算表达式的值,但带=、+=等的赋值在Python中不是表达式。这是一份声明。因此,我使用eval()将dict引用获取到局部变量(y)中,并使用该引用设置它引用的dict的成员
您还可以将这两条语句粘在一起,并消除yi局部变量:
eval("self.y{0}".format(i))[name] = value;
然而,正如其他人所说,这并不是最好的方法。一本字典、一张单子甚至一组字典都能更好地完成这项工作。(参见Alex Martelli的例子。)为什么不列一个名为
self.y
的列表或目录呢?那么你就不需要eval()
或类似的东西了。谢谢你和@dand。你指出了我以前的方法不好,并且仍然给出了答案。你们是伟大的。再次感谢。