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

+0

Выше, «обычный метод» (erm, лучше называемый объектом API) является 'Button'. «Метод обратного вызова» (лучше называемый функцией обратного вызова) - «my_callback». Разница между 'Button' и' my_callback' заключается в том, что API предоставляет определение 'Button', и пользователю API нужно только определить' my_callback'. Глубоко внутри кода API есть некоторая логика, которая говорит, что если пользователь нажимает кнопку, вызовите некоторую функцию. Чтобы настроить кнопку, API позволяет пользователю API подключать 'my_command' как функцию вызова. Это то, что делают обратные вызовы. Они подключаются к другому коду, который вы обычно не контролируете. – unutbu

+0

Понял, спасибо! – iman453

Смежные вопросы