python - 你能写一个函数来在 Python 中创建更多函数吗?
问题描述
我正在编写一个使用 scipy 优化包的可重复脚本。作为其中的一部分,您需要创建约束函数。我想创建一个可重复的脚本,允许我根据可变数量的输入创建正确数量的约束函数。
例如:
def constraintx1(x):
return (x2c2*(x[1]**2))+(x1c2*x[1]) + maxresponsec2
def constraintx2(x):
return (x2c3*(x[2]**2))+(x1c3*x[2]) + maxresponsec3
def constraintx3(x):
return (x2c4*(x[3]**2))+(x1c4*x[3]) + maxresponsec4
constraints = [{'type':'ineq', 'fun':constraintx1},
{'type':'ineq', 'fun':constraintx2},
{'type':'ineq', 'fun':constraintx3}]
所有 x2c2、x1c2 和 maxresponsec2 都来自之前定义为曲线表的输入表。
这些是我的一些约束函数,用于 3 个输入变量。但是,对于另一个项目,我可能需要对 12 个变量重复此操作,并且我希望创建一个循环,该循环将基于计数器生成正确数量的约束函数。我一直在环顾四周,但还没有找到任何东西。我希望有一些类似的东西:
numberofvariables = len(someinput)
constraints = []
for g in range(0,numberofvariables):
def constraintg (x):
return curvestable.iloc[g,1]*(x[0]**2))+(curvestable.iloc[g,2]*x[0]) + curvestable.iloc[g,4]
constraints = constraints.append([{'type':'ineq', 'fun':constraintg}])
next
我还需要指出我是编码方面的极端业余爱好者,所以不确定这是否可能。
解决方案
您应该检查 pythonclosure
函数。
def constraint_func_maker(x2c2, x1c2, maxresp):
def constraint_func(x):
return (x2c2 * (x[1] ** 2)) + (x1c2 * x[1]) + maxresp
return constraint_func
推荐阅读
- c++ - 如何在此程序中使用 cin.getline() 以便它可以读取空格?
- jdbc - CallableStatement、OUT 参数和将非 JDBC 参数表达式作为参数传递 - 索引如何工作?
- python - psycopg2.extras.execute_values 给出“AttributeError: 'function' object has no attribute 'encoding'”
- python - pandas:根据条件计算特定日期的时间序列百分比变化
- jquery - Jquery返回问题
- discord.py - 命令发送垃圾邮件不和谐机器人
- flask - Flask:更改内容大小
- proguard - 如何防止类的包名的一部分被 ProGuard(或 R8)混淆?
- python - 如何为 MinIO 使用测试桶?
- sql - SQL - 根据日期比较行并转置差异