我有一系列名称相似的数组mccdata.rho0, mccdata.rho1, ... 我希望能够在更新它们的值的同时循环使用它们。我不知道这是怎么做到的,甚至不知道这叫什么。在
我这样从文件中读取数据:
names1='l b rho0 rho1 rho2 rho3 rho4 rho5 rho6 rho7 rho8 rho9 rho10 rho11 rho12 rho13 rho14 rho15 rho16 rho17 rho18 rho19 rho20 rho21 rho22 rho23'.split()
mcmcdata=np.genfromtxt(filename,names=names1,dtype=None).view(np.recarray)
在我做了一些计算之后,我想更新“rho”数组。在
^{pr2}$但是eval命令出错:
File "<ipython-input-133-30322c5e633d>", line 13
eval("mcmcdata."+names1[2+jj]) = copy.deepcopy(rho)
SyntaxError: can't assign to function call
如何遍历现有数组并更新它们的值? 或 如何通过名称标识数组以便更新它们?在
eval
命令的工作方式不像您想象的那样。您似乎在像文本替换宏一样使用它,希望Python读取给定的字符串,然后假装您在原始源代码中编写了该文本。相反,它接收一个字符串,然后执行该代码。你给它一个引用对象属性的表达式,这很好,但是计算这个表达式的结果并不能产生你可以赋值给的东西。它生成该属性的值。在尽管Python提供了}。对于您的代码,Python提供^{} 。你给它一个对象、一个对象的属性名和一个值,然后它指定该对象的属性来引用给定的值。在
eval
,但它也提供了许多其他的东西,通常不需要{它也可以使代码更具可读性,从而去掉
^{pr2}$names1
部分。我可以这样写代码:这样,我就可以很清楚地分配对象的rho相关属性,而不必去查看
names1
列表中的内容;名称names1并没有提供关于其中内容的太多信息。在相关问题 更多 >
编程相关推荐