专栏首页sktjpython 回调装饰器

python 回调装饰器

通过使用生成器和协程可以使得回调函数内联在某个函数中。 为了演示说明,假设你有如下所示的一个执行某种计算任务然后调用一个回调函数的函数(参考7.10小节):

def apply_async(func, args, , callback): # Compute the result result = func(args)

# Invoke the callback with the result
callback(result)

接下来让我们看一下下面的代码,它包含了一个 Async 类和一个 inlined_async 装饰器:

from queue import Queue from functools import wraps

class Async: def init(self, func, args): self.func = func self.args = args

def inlined_async(func): @wraps(func) def wrapper(args): f = func(args) result_queue = Queue() result_queue.put(None) while True: result = result_queue.get() try: a = f.send(result) apply_async(a.func, a.args, callback=result_queue.put) except StopIteration: break return wrapper 这两个代码片段允许你使用 yield 语句内联回调步骤。比如:

def add(x, y): return x + y

@inlined_async def test(): r = yield Async(add, (2, 3)) print(r) r = yield Async(add, ('hello', 'world')) print(r) for n in range(10): r = yield Async(add, (n, n)) print(r) print('Goodbye') 如果你调用 test() ,你会得到类似如下的输出:

5 helloworld 0 2 4 6 8 10 12 14 16 18 Goodbye 你会发现,除了那个特别的装饰器和 yield 语句外,其他地方并没有出现任何的回调函数(其实是在后台定义的)。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04

    应用场景: # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点)   -->  l = [1, [2, [3, [4, [5, [6, [7, [8,...

    suwanbin
  • DATETIME与TIMESTAMP的一些区别与问题

    今天遇到一个问题,明明数据有更新,update_time字段却还停留在创建数据的时候。

    哲洛不闹
  • Django-手撸简易web框架-实现动态网页-wsgiref初识-jinja2初识-python主流web框架对比-00

    原来请求首行的 GET 后面跟的就是请求我们想要信息(/index 首页、/home 家)

    suwanbin
  • python面向对象基础-01

    面向对象: # 是一种编程思想,是前辈们总结的编程经验,指导程序员如何编写出更好的程序

    suwanbin
  • python函数对象-命名空间-作用域-02

    知识点: # 函数名可以作为容器对象的元素值 , # 函数名(即函数内存地址)可以加括号直接调用

    suwanbin
  • Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax搭配sweetalert实现删除确认弹窗-自定义分页器

    AJAX(Asynchronous Javascript And XML 异步的Javascript和XML)

    suwanbin
  • Django-下载安装-配置-创建Django项目-三板斧简单使用

    The web framework for perfectionists with deadlines.

    suwanbin
  • python基础-python解释器多版本共存-变量-常量

    机器语言-->汇编语言-->高级语言,学习难度及执行效率由高到低,开发效率由低到高

    suwanbin
  • python红蓝英雄大乱斗(面向对象实现)

    备注:自己写着玩儿的程序,如有bug,请别当真,这只是python面向对象方面的一个小练习;如果你很感兴趣,期待你写一个更棒的版本分享出来一起玩哦~

    suwanbin
  • Asp.net Ajax Calendar控件用法

    日期选择控件,很多地方都有用到吧,实现方式也是多了去了,笔者曾经写过一个蹩脚的js日期控件,由于太蹩脚,所以就贴代码了。今天介绍的是微软提供的Ajax Cale...

    thz

扫码关注云+社区

领取腾讯云代金券