为何作为参数的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
相关产品推荐
相关产品推荐

