You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向被不可修改的outer()调用的inner()传递多个参数?

解决方案

要解决这个问题,核心是利用**高阶函数(返回函数的函数)**给inner传递多参数,同时适配outer的调用逻辑——outer要求参数b是可调用对象,且会执行b = b(b)。

代码实现

# 可修改:改为高阶函数,先接收多参数,再返回适配outer的函数
def inner(x, y):
    def wrapper(_):
        # 这里可以使用传入的x、y进行业务计算
        return x + y
    return wrapper

# 不可修改
def outer(a, b):
    b = b(b)
    return a + b

# 调用时给inner传入多参数,得到适配的函数传给b
res = outer(
    a=3,
    b=inner(4, 5)
)

print(res)  # 输出 12(3 + 4+5)

逻辑解释

  1. inner(x, y) 作为高阶函数,先接收我们需要的多个参数,返回一个符合outer要求的wrapper函数。
  2. wrapper函数满足outer对b的要求:能接收一个参数(outer会把b自身传入,这里用_表示无需使用该参数),最终返回可与a相加的数值。
  3. 调用outer时,b=inner(4,5) 会先执行inner得到wrapper函数,outer内部执行b(b)即wrapper(wrapper),返回计算结果后与a相加。

对应Airflow场景

在Airflow的ExternalTaskSensor中,execution_date_fn要求传入接收context的函数,要传递额外参数时,同样用闭包实现:

from datetime import timedelta

def custom_execution_date_fn(days_offset, extra_info):
    def wrapper(context):
        # 结合传入的参数和context计算目标日期
        return context['execution_date'] + timedelta(days=days_offset)
    return wrapper

# 在Sensor中使用
ExternalTaskSensor(
    task_id='external_task_sensor',
    external_dag_id='target_dag',
    execution_date_fn=custom_execution_date_fn(7, 'some_info'),
    # 其他参数...
)

内容的提问来源于stack exchange,提问作者cholz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:10:37