2010-07-15 69 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