不使用lambda或库函数是否可以实现偏函数功能?
实现方案
可以实现,最常用的方式是用闭包,通过外层函数预先绑定你要传入的自定义参数,再返回一个仅接收库函数传入的无用参数的内层命名函数即可。
完整可运行代码
def libFunc(fn): fn("passes in a useless value") def foo(a, b): print(f"i want to call this function using libFunc with args {a}, {b}") num1, num2 = 5, 10 # 外层函数接收自定义参数a、b def get_target_func(a, b): # 内层函数参数规则完全匹配libFunc的调用要求,仅接收1个无用参数 def wrapper(useless_value): return foo(a, b) return wrapper # 传入闭包生成的适配函数即可,无需lambda、无需额外偏函数库 libFunc(get_target_func(num1, num2))
原错误写法说明
你之前尝试的bar(uselessValue=???, a=num1, b=num2)是直接执行了bar函数,把执行返回的结果传给了libFunc,但libFunc要求的入参是可调用的函数对象,不是函数执行结果。
闭包的本质就是提前把你要传的a、b参数绑定到返回的内层函数的作用域里,返回的wrapper本身是只需要接收1个参数的函数,完全符合libFunc的调用要求。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

