91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中回調函數指的是什么意思

發布時間:2020-11-21 11:36:52 來源:億速云 閱讀:290 作者:小新 欄目:編程語言

小編給大家分享一下python中回調函數指的是什么意思,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

一、百度百科上對回調函數的解釋:

回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用為調用它所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用于對該事件或條件進行響應。

二、什么是回調:

軟件模塊之間總是存在著一定的接口,從調用方式上,可以把他們分為三類:同步調用、回調和異步調用。

同步調用是一種阻塞式調用,調用方要等待對方執行完畢才返回,它是一種單向調用;回調是一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口;異步調用是一種類似消息或事件的機制,不過它的調用方向剛好相反,接口的服務在收到某種訊息或發生某種事件時,會主動通知客戶方(即調用客戶方的接口)。回調和異步調用的關系非常緊密,通常我們使用回調來實現異步消息的注冊,通過異步調用來實現消息的通知。同步調用是三者當中最簡單的,而回調又常常是異步調用的基礎,因此,下面我們著重討論回調機制在不同軟件架構中的實現。

三、一個小例子:

#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)。

代碼如下:

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中回調函數指的是什么意思有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平潭县| 德钦县| 崇信县| 望江县| 中江县| 乌鲁木齐市| 北流市| 色达县| 咸丰县| 交城县| 英吉沙县| 沾益县| 信阳市| 平定县| 海淀区| 社旗县| 民丰县| 诏安县| 凌云县| 金塔县| 恭城| 大石桥市| 枣阳市| 桃江县| 贡嘎县| 阿瓦提县| 松滋市| 即墨市| 武胜县| 志丹县| 南投市| 四川省| 开远市| 义马市| 泗阳县| 茂名市| 肥西县| 吉林市| 威远县| 涡阳县| 富平县|