Это довольно общий сценарий, но, чтобы дать некоторый контекст, допустим, я использую 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?