【发布时间】:2019-12-03 10:38:17
【问题描述】:
我有一个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 是一个成本函数。)
如何在 Python 3 中编码convert?
【问题讨论】:
-
为什么需要这个功能?每次需要“转换”的时候写
func_2 = lambda d,a,c: func(a,3,c,d,4)不是更容易吗? -
对于这个例子,这正是我所需要的,但是关联和值会在一个循环中改变。所以我需要使 lambda 表达式动态化。正如我试图在我的帖子中表达的那样,我使用列表定义变量和常量顺序以及常量值。根据一次迭代的优化结果,我在下一次迭代中必须工作的子空间会发生变化。
-
在一般情况下,您需要构造一个参数列表/元组,然后使用扩展语法将它们传递给函数。
-
convert究竟返回了什么?可调用函数?一个字符串? -
一个可调用的函数。
标签: python-3.x function dynamic arguments