如何用简单的英语解释回调?它们与从调用函数中获取某些上下文的另一个函数调用一个函数有什么不同?如何向新手程序员解释他们的权力?
假设我Button在Python中使用Tkinter进行了以下操作:
import Tkinter as Tk
win = Tk.Toplevel()
frame = Tk.Frame(master=win).grid(row=1, column=1)
button = Tk.Button(master=frame, text='press', command=action)
Run Code Online (Sandbox Code Playgroud)
action当我按下按钮时调用该方法,但是如果我想将一些参数传递给方法action怎么办?
我尝试过以下代码:
button = Tk.Button(master=frame, text='press', command=action(someNumber))
Run Code Online (Sandbox Code Playgroud)
这只是立即调用方法,按下按钮什么都不做.
Python函数可以作为另一个函数的参数吗?
说:
def myfunc(anotherfunc, extraArgs):
# run anotherfunc and also pass the values from extraArgs to it
pass
Run Code Online (Sandbox Code Playgroud)
所以这基本上是两个问题:
BTW,extraArgs是anotherfunc参数的列表/元组.
我的代码是:
from Tkinter import *
admin = Tk()
def button(an):
print an
print 'het'
b = Button(admin, text='as', command=button('hey'))
b.pack()
mainloop()
Run Code Online (Sandbox Code Playgroud)
按钮不起作用,在没有我的命令的情况下打印'hey'和'het'一次,然后,当我按下按钮时没有任何反应.
可能重复:
什么是回调函数?
我已经阅读了wikipedia对回调的定义,但我仍然没有得到它.谁能解释一下回调是什么,特别是以下几行
在计算机编程中,回调是对可执行代码或一段可执行代码的引用,它作为参数传递给其他代码.这允许较低级别的软件层调用在较高级别层中定义的子例程(或函数).
在并行Python中,它在提交函数中有一些叫做回调(文档)的东西,但它似乎没有解释得太好.我几天前在他们的论坛上发帖,我没有收到回复.有人会解释回调是什么以及它用于什么?
谢谢.
接口SetObserver的此代码段取自Effective Java(避免过多的同步项67)
public interface SetObserver<E> {
// Invoked when an element is added to the observable set
void added(ObservableSet<E> set, E element);
}
Run Code Online (Sandbox Code Playgroud)
并SetObserver传递给addObserver()和removeObserver方法下面给出:
// Broken - invokes alien method from synchronized block!
public class ObservableSet<E> extends ForwardingSet<E> {
public ObservableSet(Set<E> set) {
super(set);
}
private final List<SetObserver<E>> observers =
new ArrayList<SetObserver<E>>();
public void addObserver(SetObserver<E> observer) {
synchronized (observers) {
observers.add(observer);
}
}
public boolean removeObserver(SetObserver<E> observer) {
synchronized (observers) {
return observers.remove(observer); …Run Code Online (Sandbox Code Playgroud) MongoDB Java驱动程序有三种不同的驱动程序选项:
该司机介绍页面给他们每个人的简要介绍,但没有进一步的解释,提供关于何时应该使用它们.我的问题:请你澄清一下使用它们的案例是什么?什么时候我应该更喜欢一个,当我必须/必须使用特定的驱动程序选项?
我试图理解回调,并且确实得到了这个想法,但是不明白为什么它真的需要.
具体来说,它通过正常的函数调用提供了哪些额外的好处?我在看这里接受的答案:C中的"回调"是什么?它们是如何实现的?
我在下面重做同样的事情,只是没有使用函数指针.这有什么不同?
void populate_array(int *array, size_t arraySize)
{
for (size_t i=0; i<arraySize; i++)
array[i] = getNextRandomValue();
}
int getNextRandomValue(void)
{
return rand();
}
int main(void)
{
int myarray[10];
populate_array(myarray, 10);
...
}
Run Code Online (Sandbox Code Playgroud)
如果低层软件需要调用在更高层定义的函数,这是否有益?
你能否向初学者解释"承诺","异步"和"回调"之间的区别.这些术语如何相互关联?这些是一回事吗?不同的东西?我什么时候使用哪个?
callback ×4
python ×4
java ×3
arguments ×2
function ×2
tkinter ×2
asynchronous ×1
button ×1
c ×1
mongodb ×1
mongodb-java ×1
node.js ×1
promise ×1
python-3.x ×1
terminology ×1