我试图修改某个变量的值,但我只能成功读取该值,不能修改。在下面的SWE中,重点是在函数后面的循环末尾有三个变量imax,jmax,kmax
。这不是归还他们。如果我不在函数中,这个小例子的效果就像我所希望的那样。你知道吗
def subzoneStruct__(maxIndex):
imax = maxIndex[0]
jmax = maxIndex[1]
kmax = maxIndex[2]
print "before",locals()["imax"],imax
for ind in ["imax","jmax","kmax"]:
val=locals()[ind]
print ind,val,
if val > -1:
val=max(1, val-1)
print "in",val,
locals()[ind]=val
print locals()[ind],
print "out",locals()[ind]
print "after",locals()["imax"],imax
print imax,jmax,kmax
# Doing some stuff using imax,jmax,kmax
# ...
subzoneStruct__((10,11,12))
print "should be (9,10,11)"
如何使用相同的循环修改imax,jmax,kmax
(不一定使用locals
)?你知道吗
正如RemcoGerlich所说,你不应该那样做。然而,不需要字典来存储这三个变量,因为只需要一个简单的
list
。下面的内容可以稍微缩短一些,但编写它是为了尽可能清楚地显示它在做什么,并且以一种类似于您问题中的代码的方式。你知道吗在我的例子中,我发现最有效的方法是使用综合列表
但我的问题仍然是如何从变量引用中访问和修改值(使用名称或id或…)。所以如果你对这一点有一个答案,在这里加上它会很好。你知道吗
你真的不应该这样做,你在用局部变量来代替简单的字典。如果
locals()
不存在,那么表现得更好。你知道吗所以这就变成了:
(可能印错了,但你明白了)
相关问题 更多 >
编程相关推荐