如何实现将函数作为参数传递且其参数随调用动态变化?
实现动态传参的函数封装
首先得纠正你伪代码里的核心错误——你写的def function(another_function(parameters))是把another_function(parameters)的返回值当作参数传入,而不是传入函数本身。正确的思路是直接把函数对象作为参数传给f,再在f内部动态生成参数调用它。
基础实现(单动态参数)
直接把函数g作为参数传入f,在f的循环里每次把动态生成的i传给g即可:
def f(g): for i in range(10): print(g(i)) # 测试用的函数g def double(x): return x * 2 # 调用f f(double)
运行后会依次打印0到18的偶数,每次循环都把当前的i动态传给g。
支持多参数的场景(结合*args/**kwargs)
如果你的g需要固定参数+动态参数,可以让f额外接收固定参数,再用*args或**kwargs把固定参数和动态参数一起传给g:
def f(g, *fixed_args, **fixed_kwargs): for i in range(10): # 把动态的i作为第一个参数,拼接固定参数后传给g print(g(i, *fixed_args, **fixed_kwargs)) # 测试用的g,需要动态参数+一个固定乘数 def multiply(x, factor): return x * factor # 调用f时传入固定参数 f(multiply, 3) # 也可以用关键字参数传递 f(multiply, factor=3)
这段代码会输出0到27的3倍数,每次循环都把动态生成的i和固定的3一起传给multiply。
核心逻辑总结:传递函数本身而非函数调用结果,在封装函数内部根据执行逻辑生成动态参数,再调用传入的目标函数。
内容的提问来源于stack exchange,提问作者Delta Foxtrot
相关产品推荐
相关产品推荐

