我有这个示例代码,试图演示如何使用回调函数:
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.
看起来回调函数在main
中的逻辑之前执行。为什么?我怎样才能使回调函数在main
中使用之前不被调用呢?
- 另请参阅:**Python Argument Binders
7条答案
按热度按时间bxjv4tth1#
在这个代码中
callback
本身不做任何事情;它接受参数-def callback(a, b):
您先执行
callback(1, 2)
的事实将调用该函数,从而打印Sum = 3
,然后使用callback
函数的结果调用main()
,该函数打印第二行由于
callback
不返回显式值,因此返回为None
。因此,您的代码等效于
溶液
您可以尝试一开始不调用该函数,而只传递其句柄。
mwecs4sa2#
以下是您想要执行的操作:
nr7wwzry3#
问题是在将回调函数作为可调用函数传递之前,需要先对它进行求值。解决这个问题的一个灵活方法是:
您也可以选择包含一种支持关键字参数的方法。
suzh9iv84#
正如注解中提到的,只要回调函数的后缀带有开括号和闭括号,就会调用回调函数;所以你经过的时候就叫它。
您可能希望使用lambda并传入值。
elcex8rz5#
您的代码按如下方式执行:
使用
(1, 2)
调用callback
函数,并返回None
(如果没有return语句,您的函数将打印Sum = 3
并返回None
)使用
None
作为参数调用main
函数(因此callback != None
将始终为False
)izj3ouym6#
这是一篇老文章,但下面的内容可能是对编写和使用回调函数的补充说明,特别是如果你想知道它从哪里获得参数,以及你是否可以访问它的返回值(如果没有办法从接收回调函数的函数获得返回值)。
下面的代码定义了一个类
CallBack
,它有两个回调方法(函数)my_callback_sum
和my_callback_multiply
。回调方法被输入到方法foo
中。结果:
正如您所看到的,回调函数
c_value2
的一个值是从foo
中的参数foo_value
获取的,在main
中被赋予了值20,而c_value1
是从foo
内部获取的,在本例中是值10(如果foo
是第三方导入模块的某个方法,如pyaudio,则可能无法清楚地看到)。回调函数function的返回值可以通过将其添加到类
CallBack
的命名空间(在本例中为cls.operator
)来检索xvw2m8pv7#
您可以使用匿名函数