如何编写一个简单的回调函数?

2024-04-26 12:59:02 发布

您现在位置:Python中文网/ 问答频道 /正文

Python2.7.10

我编写了以下代码来测试一个简单的回调函数。

def callback(a, b):
    print('Sum = {0}'.format(a+b))

def main(callback=None):
    print('Add any two digits.')
    if callback != None:
        callback

main(callback(1, 2))

我在执行时收到:

Sum = 3
Add any two digits.

为什么Add any two digitsSum = 3之后?我想是因为回调函数首先执行。如何在main()中的所有其他代码执行后执行回调函数?


Tags: 函数代码noneaddformatifmaindef
3条回答

你想做的是:

def callback(a, b):
    print('Sum = {0}'.format(a+b))

def main(a,b,f=None):
    print('Add any two digits.')
    if f != None:
        f(a,b)

main(1, 2, callback)

callback自己什么也做不了。它接受参数。

首先执行callback(1, 2)的操作将调用该函数,从而打印Sum = 3

由于callback不返回显式值,因此它将作为None返回,因此您的代码相当于

callback(1, 2)
main()

您可以尝试先不调用函数,而只是传递其句柄。

def callback(sum):
    print("Sum = {}".format(sum))

def main(a, b, callback = None):
    print("adding {} + {}".format(a, b))
    if callback:
        callback(a+b)

main(1, 2, callback)

如注释中所述,只要回调的后缀是open和close parens,它就会被调用;因此,当您传递回调时,它就会被调用。

您可能需要使用lambda并传入值。

#!/usr/bin/env python3

def main(callback=None, x=None, y=None):
    print('Add any two digits.')
    if callback != None and x != None and y != None:
        print("Result of callback is {0}".format(callback(x,y)))
    else:
        print("Missing values...")

if __name__ == "__main__":
    main(lambda x, y: x+y, 1, 2)

相关问题 更多 >