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

如何让函数接收带参数的函数作为参数?解析Python代码执行逻辑

代码执行过程详细拆解
def Wrapper(func):
  def MyPrint(message):
    print('Hello ' + message)
  
  func(MyPrint)

Wrapper(lambda my_print: my_print('world'))

问题

我理解函数可以接收另一个函数作为参数并通过func()调用它,但无法理解Wrapper(lambda my_print: my_print('world'))是如何调用内部函数MyPrint的?func是形参,lambda my_print: my_print('world')是对应的实参,而该实参似乎“穿透”了Wrapper内部的函数。这种模式在JavaScript中十分常见,但我对此感到困惑,希望能得到该代码执行过程的详细解释。

执行流程拆解

我们一步步捋清楚这段代码的运行逻辑:

  1. 传入lambda作为实参:调用Wrapper(lambda my_print: my_print('world'))时,这个lambda函数会被赋值给Wrapper的形参func。此时func就代表这个lambda。
  2. 定义内部函数MyPrint:进入Wrapper函数后,首先定义了MyPrint函数——它接收一个message参数,功能是打印Hello 拼接message的结果。这一步只是完成函数定义,并没有执行它。
  3. 传递MyPrint给lambda:执行func(MyPrint),也就是把刚定义的MyPrint函数作为参数,传给func(也就是那个lambda)。
  4. 执行lambda函数:lambda的参数my_print现在指向MyPrint函数,所以my_print('world')等价于直接调用MyPrint('world')。
  5. 执行MyPrint并输出结果:MyPrint('world')运行后,拼接字符串得到Hello world并打印。

这个模式本质是回调函数的典型用法:Wrapper内部封装了一个工具函数(MyPrint),然后把这个工具函数交给外部传入的回调(lambda),由回调来决定如何使用这个工具函数——就像这里lambda直接调用了MyPrint并传入指定参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:35:35