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

为何作为参数的func可被当作函数调用?Python装饰器示例解析

为什么函数参数可以被当作函数调用?

这本质是因为Python中的函数是一等对象——简单说,函数和字符串、整数这些普通数据一样,能被赋值给变量、作为参数传递给其他函数,也能作为返回值返回。

咱们拿你给的代码一步步拆解:

首先看完整代码:

def decor(func):
    def wrap():
        print("=============")
        func()
        print("=============")
    return wrap

def print_text():
    print("Hello world!")

decorated = decor(print_text)
decorated()

具体执行过程:

  • 当你定义print_text时,它是一个函数对象,就像一个可以执行的“工具”。
  • 调用decor(print_text)时,你把print_text这个函数对象直接传给了decor的参数func——此时func就是print_text的“别名”,指向同一个函数对象。
  • decor内部定义了wrap函数,这个函数里的func(),其实就是调用func指向的那个函数(也就是print_text())。
  • decor最后返回wrap这个函数对象,decorated变量接收了这个返回值。
  • 调用decorated()时,实际执行的是wrap函数的代码:先打印分隔线,然后调用func()(也就是print_text()输出Hello world!),最后再打印分隔线。

简单说,你传递的不是函数的“执行结果”,而是函数本身,所以在另一个函数里可以直接调用它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:20:37