2010-07-15 76 views
4

有人可以解释回调方法是如何工作的,如果可能的话,给我一个Python例子吗?所以据我了解,它们是由API的用户提供给API的方法,以便用户不必等到该特定的API函数完成。那么用户程序是否继续执行,并且一旦API调用回调方法,就返回到提供回调方法的程序中的点?回调方法如何实质上影响程序的“流程”?用Python回拨

对不起,如果我在这里模糊。

回答

7

回调只是用户提供的钩子。它们允许您指定在发生某些事件时调用哪个函数。 re.sub有所回调,但它听起来就像你正在处理一个图形用户界面,所以我给一个GUI例如:

这里是一个回调的一个很简单的例子:

from Tkinter import * 

master = Tk() 

def my_callback(): 
    print('Running my_callback') 

b = Button(master, text="OK", command=my_callback) 
b.pack() 

mainloop() 

当您按下OK按钮,程序打印“运行my_callback”。

如果您使用此代码玩:

from Tkinter import * 
import time 

master = Tk() 

def my_callback(): 
    print('Starting my_callback') 
    time.sleep(5) 
    print('Ending my_callback')  

def my_callback2(): 
    print('Starting my_callback2') 
    time.sleep(5) 
    print('Ending my_callback2')  

b = Button(master, text="OK", command=my_callback) 
b.pack() 
b = Button(master, text="OK2", command=my_callback2) 
b.pack() 

mainloop() 

,你会看到,从响应直到回调结束按下其中一个按钮块的GUI。因此,“用户确实必须等到该特定的API函数完成”。

+0

感谢您的回复。因此,回调(API)方法和常规(API)方法之间的唯一区别是,回调方法不是简单地返回值,而是在完成时调用用户方法? – iman453 2010-07-15 16:17:57

+0

上面,“常规方法”(erm,更好的称为API对象)是'Button'。 “回调方法”(更好的称为回调函数)是'my_callback'。 'Button'和'my_callback'的区别在于API提供了'Button'的定义,而API的用户只需要定义'my_callback'。 API的代码深处是一些逻辑,它说如果用户按下按钮,调用某个函数。为了定制按钮,API允许API用户挂接'my_command'作为要调用的函数。这就是回调所做的。他们挂钩到您通常无法控制的其他代码中。 – unutbu 2010-07-15 17:00:22

+0

明白了,谢谢! – iman453 2010-07-15 17:16:11