如何打印作为参数传入的函数返回值?C转Python入门疑问
嘿,我完全懂你现在的困惑——刚从C转Python,很容易在函数传递的细节上踩坑!
问题出在哪?
你调用main_function(stub_function)的时候,其实是把函数本身作为参数传进去了,而不是调用这个函数后得到的返回值。在Python里,函数是一等对象,也就是说函数本身可以像变量一样被传递、赋值,所以main_function里的print(string)打印的是这个函数对象的内存标识,也就是你看到的<function stub_function at 0x7f21f07e0d08>。
两种解决方法
根据你的需求,有两种常见的处理方式:
1. 直接传递函数的返回值
如果你只是想把stub_function的返回值传给main_function,只需要在传递的时候加上()调用函数就行:
main_function(stub_function())
这里的stub_function()会先执行,返回'some random string',再把这个字符串传给main_function,这样就能打印出你想要的内容了。
2. 修改main_function,让它内部调用传入的函数
如果你是想把函数作为“逻辑单元”传递进去(比如以后可能换其他函数传进来),可以修改main_function,让它在内部调用传入的函数:
def main_function(func): # 调用传入的函数,拿到返回值再打印 print(func()) def stub_function(): return 'some random string'
这时候再调用main_function(stub_function),就会自动执行传入的stub_function,并打印它的返回值了。这种方式类似C里的函数指针用法,适合需要回调函数的场景。
补充:和C的小对比
其实和C里的逻辑有点像——在C里如果你传递了一个函数指针,也需要显式调用它(比如(*func)())才能拿到返回值;Python里的函数对象就相当于C的函数指针,直接传的话是“指针本身”,必须调用才会执行函数逻辑~
内容的提问来源于stack exchange,提问作者Jamesyyy

