这是一个非常普遍的场景,但是为了给出一些上下文,假设我正在使用cvxpy进行一些约束优化。现在说我想在运行时提供目标函数,func
如下所示:
import cvxpy as cp
class foo:
def __init__(self,n,q,s):
self.n,self.q,self.s=n,q,s
self.K = len(n)
self.x = cp.Variable(self.K)
self.func = cp.sum(sum(self.n[j]*sum(self.n[i]*self.x[j] for i in range(self.K)) for j in range(self.K))
当然,示例中的函数是人为的,只是为了给您一个示例,说明我愿意提供什么样的字符串表达式作为命令行参数,只是为了避免硬编码东西/一直更改源代码. 如何func
在运行时用新值覆盖该成员的值?我读到了exec
,但我不确定这是否有帮助。简而言之,我愿意做类似的事情,python my_awesom_prog.py "self.n[i]*self.n[j] for i in range(self.K) for range(self.K)"
并且我希望程序表现得好像这个(可怕的)字符串func
首先作为定义存在。编辑:更重要的是,我想要一个这样的方法:
def reset_objective(mystring):
self.func = interpret_as_cvxpy_entity(mystring)
现在,如何获取该interpret_as_cvxpy_entity
API?