pythoncallback函数
Ⅰ python回调函数的使用方法
python回调函数的使用方法
在计算机程序设计中,回调函数,或简称回调(Callback),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序
有两种类型的回调函数:
那么,在python中如何实现回调函数呢,看代码:
代码如下:
def my_callback(input):
print "function my_callback was called with %s input" % (input,)
def caller(input, func):
func(input)
for i in range(5):
caller(i, my_callback)
Ⅱ 求这段python的注释
片段代码没法注释
比如引入的头文件,看不到头文件的源码或者说明注释之类的,完全只能靠猜测
再说这只是片段代码 ,几乎得不到什么有用信息。
尝试,注释
#引入各种模块
importBigWorld
fromfunctoolsimportpartial
fromgui.Scaleform.BattleimportDamagePanel
fromgui.battle_controlimportg_sessionProvider
#定义一个私有函数,一个参数bool
def__setFireInVehicle(self,bool):
#调用old_setFireInVehicle函数,并传入一个参数bool
old_setFireInVehicle(self,bool)
#升早大概是一个类答孝的函数callback回调,传入各种参数
BigWorld.callback(4.57692e+018,partial(g_sessionProvider.getEquipmentsCtrl().changeSettingByTag,'extinguisher',None,BigWorld.player()))
#两个赋值语句
old_setFireInVehicle=DamagePanel._setFireInVehicle
DamagePanel._setFireInVehicle=__setFireInVehicle
#就能得到这么多
再举个例子:
前提:我又一篇文言文,并且你对此文一无所知。
那么问题来了:我随便从中抽取一个片段,问你什么意思。(你觉着你清笑稿能翻译出来的可能性有多大)
Ⅲ python中,怎么更新labelz中的文本
#-*-coding:utf-8-*-
'''
按照我个人的理解:
你的time.sleep调用在了mainloop之前,就是在显示label之前delay就已经完成了,同样config也完成了,所以直接显示了text=2的结果。
但是即使是在label弹出显示之后调用sleep函数(我也试过了),还有一个问题,就是sleep是阻塞式执行的,sleep完之前用户进行不了任何操作,UI也无法更新,必须要等到sleep做完了才能发生。
所以我另外开了一个线程,用于延迟,延迟完成之后通过回调函数通知UI进行更新。
凯宽脊废话不多了,下面是代码,我用的时python2.7.8。
如果有说的不对的地方,请高手指点。
'''
fromTkinterimport*
importtime
importthreading
#计时线程用于延时
classMyThread(threading.Thread):
#sleeptime为需要延迟的时间
#callback为延迟结束后触发的回调函数
def__init__(self,id,sleeptime,callback):
threading.Thread.__init__(self)
self.id=id
self.callback=callback
self.sleeptime=sleeptime
#重写线程run函数
defrun(self):
time.sleep(self.sleeptime)
#延时完成后传入回调函数
self.callback()
classExample(Frame):
def__init__(self,parent):
Frame.__init__(self,parent)
self.parent=parent
self.label=None
self.initUI()
#初始化窗体
definitUI(self):
self.label=Label(self,巧姿text='1')
self.label.bind('<Visibility>',self.onVis)
self.label.pack()
self.parent.title("Label")
self.pack()
#在label显示后进行调用
defonVis(self,*args):
print"LabelVisible!"
#创建一个新的线程用于延迟,并且传入changeText作为回调函数
t=MyThread(001,2,self.changeText)
盯渗t.start()
#在延迟完成后进行调用,与Mythread的callback绑定
defchangeText(self):
self.label.config(text='10')
window=Tk()
app=Example(window)
window.mainloop()
Ⅳ python的yield 和callback 求助
for k in ojt:
if k['url']:
print k['url']
yield Request(k['url'],callback=self.parse_item)
print len(ojt)
def parse_item(self,response):
hxs = Selector(response)
movie_name = hxs.xpath('//*[@id="content"]/h1/span[1]/text()').extract()
movie_director =hxs.xpath('//*[@id="info"]/span[1]/span[2]/a/text()').extract()
movie_writer = hxs.xpath('//*[@id="info"]/span[2]/span[2]/a/text()').extract()
在这段代码里面的yield执行顺序我很不解,这段代码的意思是将得到的url都输出,但是每次输出的时候都滚尺会将url放进yield语句的呀 为什么没有执行呢 就是每次输出迟改一条url就调用下一个函数呢 就是callback函数呢 而且输出的len()为什么码备判只执行了一次呢?
兄弟,看起来像是scrapy。
yield Request(k['url'],callback=self.parse_item)
这段话的意思大概是说,请求k['url']这个url,然后给parse_item函数做处理。
具体的不说啦。你去网络yield和callback
Ⅳ 如何在Python中创建一个CFUNCTYPE-python,回调callback,ctypes
1. 我忘了ctypes的操作方法是:
下面是从复制
因此,我们的回调函数接收整型指针,并且必须返回一个整数。首先,我们创建了回调函数的类型:
CMPFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int))
对于优先个回调函数中,我们简单地打印出我们得到,并返回0(;-):
def py_cmp_func(a, b):
print "py_cmp_func", a, b
return 0
创建C可调用的回调函数:
cmp_func = CMPFUNC(py_cmp_func)
Ⅵ python callback错误该如何解决
很多api的结果大概都是迟卜下面这个样子,如:
eg:url地址+参数1+参数2
这个跟回调没有码扰穗关系啊,就是请求一个地址给你返回参数。
但是如果改成:
eg:url地址+参数1+参数2+callback函数
这样请求成功后,再调用callback函数,才叫回调。
如李旁果解决了您的问题请采纳!
Ⅶ 回调函数(callback)是什么 ,,
回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数。
回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。同时,有一些需求必须要使用回调函数来实现。
最着名的回调函数调用有C/C++标准库stdlib.h/cstdlib中的快速排序函数qsort和二分查找函数bsearch中都会要求的一个与strcmp类似的参数,用于设置数据的比较方法。
意义
因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的函数的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。
Ⅷ 如何在Python使用装饰器来注册回调函数
之前一直知道装饰器可以增强一个已经存在的方法,Python也提供了annotation的方法,很好用. 但是再看flask login的扩展包的时候. 发现装饰器还可以实现回调函数的注册搜缓功能.
flask login就是通过下面的装饰器,来注册回调函数,当没有sessionID时,通过装饰器指定的袭厅函数来读取用户到session中.
@login_manager.user_loader
下面写了一个简单的测试例子来演示这个功能.
import time
import functools
class Test():
#/**feature将调用callback(), 但是在Test中并没有真正的定义callback**/
def feature(self):
self.callback()
def decorate(self, func):
self.callback=func
return func
test = Test()
#/**将foo注册为回调函数*//
@test.decorate
def foo():
print 'in foo()'
#/**调用feature将触发世禅模回调函数**/
test.feature()
Ⅸ Python回调函数用法
本文实例讲述了Python回调函数用法。分享给大家供大家参考。具体分析如下:
一、网络上对回调函数的解释:
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
二、什么是回调:
软件握乱模块之间总是存在着一定的接口毁谨,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中段余档最简单的,而回调又常常是异步调用的基础,因此,下面我们着重讨论回调机制在不同软件架构中的实现。
三、一个小例子:
16
17
18
19
20
21
22
#call.py
import called
def callback():
print in callback
def main():
#called.test()
called.test_call(callback)
print in call.py
main()
#called.py
def test():
print in called.py test()
def test_call(p_call):
print in called.py test_call()
p_call()
joe@joe:~/test/python$ python call.py
in called.py test_call()
in callback
in call.py
joe@joe:~/test/python$
网上搜到的一个面向对象实现的例子:
当你要加入回调(Callback)功能的时候,代码往往会偏重于回调的实现而不是问题本身了。一个解决方法就是实现一个通用的基础类来解决回调的需求,然后再来实现你为某个事件(Event)所绑定(Binding)的方法(Method)。
代码如下:
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class CallbackBase:
def __init__(self):
self.__callbackMap = {}
for k in (getattr(self, x) for x in dir(self)):
if hasattr(k, bind_to_event):
self.__callbackMap.setdefault(k.bind_to_event, []).append(k)
elif hasattr(k, bind_to_event_list):
for j in k.bind_to_event_list:
self.__callbackMap.setdefault(j, []).append(k)
## staticmethod is only used to create a namespace
@staticmethod
def callback(event):
def f(g, ev = event):
g.bind_to_event = ev
return g
return f
@staticmethod
def callbacklist(eventlist):
def f(g, evl = eventlist):
g.bind_to_event_list = evl
return g
return f
def dispatch(self, event):
l = self.__callbackMap[event]
f = lambda *args, **kargs:
map(lambda x: x(*args, **kargs), l)
return f
## Sample
class MyClass(CallbackBase):
EVENT1 = 1
EVENT2 = 2
@CallbackBase.callback(EVENT1)
def handler1(self, param = None):
print handler1 with param: %s % str(param)
return None
@CallbackBase.callbacklist([EVENT1, EVENT2])
def handler2(self, param = None):
print handler2 with param: %s % str(param)
return None
def run(self, event, param = None):
self.dispatch(event)(param)
if __name__ == __main__:
a = MyClass()
a.run(MyClass.EVENT1, mandarina)
a.run(MyClass.EVENT2, naranja)
这里有一个类,它有两个事件(EVENT1和EVENT2)和两个处理函数(handler)。第一个处理函数handler1注册了EVENT1,而第二个处理函数handler2当EVENT1或者EVENT2发生的时候都会执行(即注册了全部的事件)。
运行函数(run)在MyClass的主循环中,它会将对应的事件派送(dispatch)出去。这(这里指dispatch函数)会返回一个函数,我们可以把所有需要传给这个函数的参数列表传给它。这个函数运行结束会返回一个列表(list),列表中是所有的返回值。
也许,使用Metaclass能够实现的更优雅一些吧。
希望本文所述对大家的Python程序设计有所帮助。
Ⅹ python 中callback怎么使用
在计算机程序设计中,回调函数,或简称回调(Callback),是指通过函数参数传递到其它代码的,某一块可执行代码的模团引用。这一设计允许了底层代码调用在高层定义的子程序:
例如:
defmy_callback(input):
print"functionmy_callbackwascalledwith%sinput"%(input,)
defcaller(input,缺码蚂func):
func(input)
foriinrange(5):
caller(i,my_callback)
执行结果是:
functionmy_callbackwascalledwith0input
functionmy_callbackwascalledwith1input
functionmy_callbackwascalledwith2input
functionmy_callbackwascalledwith3input
functionmy_callbackwas伏埋calledwith4input