python - eval()的奇怪行为与python循环中的lambda函数
问题描述
我有一个字符串输入文件如下(每行一个方程): 1.0 - x[0] - x[1] x[0] + x[1]
我试图在 python 中使用 eval() 将这些方程转换为 lambda 函数,然后在优化方案中使用它们。这是我所做的:
def gen_const(input):
list = input.read_eqs()
for i in list:
m = lambda x: eval(i)
cons.extend([{'type': 'ineq', 'fun': m}])
return cons
这个缺点在优化方案中使用时会失败。但是,如果我只考虑循环内的第一轮(即第一个方程),则约束工作正常:
def gen_const(input):
list = input.read_eqs
for i in list[0:1]:
m = lambda x: eval(i)
cons.extend([{'type': 'ineq', 'fun': m}])
return cons
奇怪的是,当我复制完全相同的方程式(从输入文件中复制,相同的字符,间距)时,它也可以正常工作:
def gen_const(input):
list = input.read_eqs
m0 = '1.0 - x[0] - x[1]'
m1 = 'x[0] + x[1]'
cons.extend([{'type': 'ineq', 'fun': lambda x: eval(m0)}])
cons.extend([{'type': 'ineq', 'fun': lambda x: eval(m1)}])
return cons
所以我在循环中看到了 eval() 的这种奇怪行为,我真的被卡住了。我读过 eval 是邪恶的,并搜索了替代方案,但找不到更好的方法来解决我的问题。我将衷心感谢您的帮助。
解决方案
推荐阅读
- php - 如何使用 php 参数绑定图像?
- php - 如何将 Sendinblue 与 PHPMailer 一起使用
- javascript - 清除文本字段时触发事件:Javascript
- python - Python elasticsearch-dsl动态查询
- ios - 找不到在捆绑包 NSBundle 中命名的故事板
- google-apps-script - 是否可以限制 Google 电子表格中的解冻行?
- html - 如何将 CSS 类标记为已弃用
- r - 如何创建具有显着差异和 2 个测量变量的多面箱线图?
- nscollectionview - NSCollectionView 作为 NSCollectionViewItem
- python - Pandas:比较行值并修改下一列的行值