python获取回调函数返回值,python异步回调函数例子

  python获取回调函数返回值,python异步回调函数例子

  回调函数是由函数指针调用的函数。下面这篇文章主要介绍Python中回调函数的相关信息。通过一个示例代码非常详细的介绍了一下,有需要的朋友可以参考一下。

  00-1010摘要回调函数回调机制有什么优点?相关回调函数的异步处理使用绑定方法,而不是这个简单的函数。用闭包代替上面的类,用协同学实现异步操作的汇总。

  

目录

  主要介绍python的回调函数callback。

  

摘要

  程序运行时,一般情况下,应用程序会经常通过API调用库中预先准备好的函数。但是,有些库函数要求应用程序先给它传递一个函数,以便在合适的时候调用它来完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function).

  例如:

  有酒店提供叫醒服务,但是需要旅客自己决定叫醒方式。你可以打电话到房间,或者你可以派服务员来敲门。如果睡死了,又怕耽误事,也可以要求往头上浇一盆水。这里的“唤醒”行为是由酒店提供的,相当于库函数,但唤醒方式是由旅客决定并告知酒店的,这就是回调函数。旅客告诉酒店如何叫醒自己的动作,也就是把回拨功能转移到仓库功能的动作,叫做登记回调函数.

  如您所见,回调函数通常与应用程序处于同一抽象级别(因为传入哪种回调函数是在应用程序级别决定的)。回调就变成了对底层的高层调用,底层回去调用高层流程。(我觉得)这应该是回调最早的应用,也是如此命名的原因。

  

什么是回调函数

  回调机制提供了很大的灵活性。我们把图中的库函数改成了中间函数,因为回调不仅仅在应用程序和库之间使用。任何时候,只要你想获得类似上述情况的灵活性,都可以使用回调。有些学生可以想到回调似乎只是函数间的调用,可以发现两者之间的一个关键的不同:

  在回调中,我们用某种方式把回调函数像参数一样传入中间函数。可以理解为在传入一个回调函数之前,中间函数是不完整的。换句话说,程序可以通过在运行时注册不同的回调函数来决定和改变中间函数的行为。这比简单的函数调用灵活得多。

  #回调函数1

  #生成2k形式的偶数

  双精度(x):

  返回x * 2

  #回调函数2

  #生成4k形式的偶数

  def四倍(x):

  返回x * 4

  callback_demo.py

  甚至从进口*

  #中间函数

  #接受生成偶数的函数作为参数

  #返回一个奇数

  def getOddNumber(k,getEvenNumber):

  返回1 getEvenNumber(k)

  #启动功能,这里是程序的主要功能

  定义主():

  k=1

  #当需要生成2k 1形式的奇数时

  i=getOddNumber(k,double)

  打印(一)

  #当需要4k 1形式的奇数时

  i=getOddNumber(k,四倍)

  打印(一)

  #当需要8k-1形式的奇数时

  i=getOddNumber(k,x: x * 8)

  打印(一)

  if __name__==__main__:

  主()

  

回调机制的优势

  def apply_ascyn(func,args,callback):

  func函数是被处理的函数。

  由args表示的参数

  回调指示的函数处理完成后要执行的动作。

  结果=函数(*参数)

  回拨(结果)

  def add(x,y):

   return x + y

  def print_result(result):

   print(result)

  apply_ascyn(add, (2, 3), callback=print_result)

  这里print_result只能接收一个result的参数,不能传入其他信息。当想让回调函数访问其他变量或者特定环境的变量值的时候会遇到问题。

  

  

使用一个绑定方法来代替这个简单函数。

  

def appy_async(func, args, *, callback):

   result = func(*args)

   #异步执行的函数 同时将执行后返回到这个早从这个函数跳出去

   callback(result)

  def add(x ,y):

   return x + y

  class ResultHandler(object):

   def __init__(self):

   self.sequence = 0

   def handle(self, result):

   self.sequence += 1

   print("[{}] Got: {}".format(self.sequence, result))

  resultHandler = ResultHandler()

  appy_async(add, (2,3), callback=resultHandler.handle)

  

  

  

使用闭包代替上面的类来实现

  

def apply_async(func, args, *, callback):

   result = func(*args)

   callback(result)

  def add(x ,y):

   return x + y

  def make_handler():

   sequence = 0

   def handler(result):

   nonlocal sequence

   sequence += 1

   print("[{}] Got:{}".format(sequence, result))

   return handler

  handler = make_handler()

  apply_async(add, (2,3), callback=handler)

  

  

使用协程来完成异步操作

  

def apply_async(func, args, *, callback):

   result = func(*args)

   callback(result)

  def add(x, y):

   return x + y

  def make_handler():

   sequence = 0

   while True:

   result = yield

   sequence += 1

   print("[{}] Got:{}".format(sequence, result))

  handle = make_handler()

  next(handle)

  apply_async(add, (2,3), callback=handle.send)

  博文参考:

  python3回调函数(callback) - 知乎

  

  

总结

  到此这篇关于Python中回调函数(callback)的文章就介绍到这了,更多相关Python 回调函数callback内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: