【发布时间】:2016-08-24 14:07:21
【问题描述】:
我被这种问题弄疯了:
我有一个表示函数的字符串列表(用于 eval),我需要首先将变量替换为通用 x[0], x[1],...。
前段时间我发现我可以使用subs() 做到这一点。然后我需要生成一个函数列表(在 SciPy 最小化中定义约束)。
我正在尝试类似:
el=[budget.v.values()[0],silly.v.values()[0]] # my list of string/equations
fl=[]
for i in range(len(el)):
def sos(v):
vdict = dict(zip(q.v.values(),v))
return eval(el[i]).subs(vdict)
fl.append(sos)
del sos # this may be unnecessary
fl 的结果是:
[<function sos at 0x19a26aa28>, <function sos at 0x199e3f398>]
但是这两个函数总是给出相同的结果(对应于最后一个'sos'定义)。如何保留不同的函数定义?
【问题讨论】:
-
"但是这两个函数总是给出相同的结果(对应于最后一个'sos'定义)"这是因为
i是按名称捕获的,所以当@ 987654327@ 被调用i将具有最终值。见here
标签: python list function redefinition