python-3.x - 动态 Python 函数参数重新路由
问题描述
我有一个python函数
func(a, b, c, d, e)
.
我想将此函数传递给另一个评估它的函数。问题是这个其他函数只改变参数的任意子集(a, b, c, d, e)
,并且其他参数应该预加载一个常量。参数顺序也可能改变。
例如:我想func_2
改变 a、c 和 d,而 b=3 和 e=4。所以我需要一个例行程序
def convert(func, variables=[3, 0, 2], constants=[1, 4], vals=[3, 4]):
...
python magic
...
return func_2
转换:
func(a, b, c, d, e)
-> func_2(d, a, c, b=3, e=4)
,
这样当我打电话的时候func_2(1, 2, 3)
,实际上所谓的幕后就是func(2, 3, 3, 1, 4)
。
(这是针对在参数空间的子空间上运行的优化算法,这些子空间可以从一个周期到另一个周期变化。func
是一个成本函数。)
如何convert
在 Python 3 中编码?
解决方案
这有效:
def convert(func, vars, fixed):
# vars: list of indices
# fixed: dictionary mapping indices to constants
n = len(vars) + len(fixed)
def func_2(*args):
newargs = [None] * n
for i, j in enumerate(vars):
newargs[j] = args[i]
for k in fixed:
newargs[k] = fixed[k]
return func(*newargs)
return func_2
推荐阅读
- javascript - 如何从 Node.js 验证对话框流的参数
- wordpress - 如何将图库功能添加到 WordPress 块插件
- neo4j - neo4j 查找父节点是否存在关系
- python-3.x - 无效的区块链 Json 数据
- wordpress - 我可以在前端使用“Admin Select Box to Select2”插件吗?
- delphi - 使用 Delphi 显示当前用户的语言(英文)?
- python - 从数字列表中获取最大数字的最快和最有效的方法
- java - Display only default message of Spring boot validation - MethodArgumentNotValidException
- powershell - PowerShell脚本将文件从映射的网络驱动器复制到相同映射的网络驱动器的子文件夹,然后将日期添加到文件名
- sql - 如何通过缺少值的联合分析 SQL 数据?