返回顶部
首页 > 资讯 > 后端开发 > Python >Python生成器和基于生成器的协程
  • 665
分享到

Python生成器和基于生成器的协程

2023-06-15 08:06:21 665人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

小编给大家分享一下python生成器和基于生成器的协程,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是生成器Generator生成器就是可以生成值的函数2.当一个函数里有了 yield关键字就成了生成器3.生成器可

小编给大家分享一下python生成器和基于生成器的协程,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

一、什么是生成器

Generator

生成器就是可以生成值的函数
2.当一个函数里有了 yield关键字就成了生成器
3.生成器可以挂起执行并且保持当前执行的状态

代码示例:

def simple_gen():yield 'hello'yield 'world'gen = simple_gen()print(type(gen))  # 'generator' objectprint(next(gen))  # 'hello'print(next(gen))  # 'world'

二、基于生成器的协程

python3之前没有原生协程,只有基于生成器的协程

pep 342(Coroutines via Enhanced Generators)增强生成器功能
2.生成器可能通过 yield 暂停执行和产出数据
3.同时支持send()向生成器发送数据和throw()向生成器抛出异常

Generator Based Corouteine代码示例:

def coro():hello = yield 'hello'  # yield 关键字在 = 右边作为表达式,可以被 send 值yield helloc = coro()# 输出 'hello', 这里调用 next 产出第一个值 'hello',之后函数暂停print(next(c))# 再次调用  send 发送值,此时 hello 变量赋值为 'world',然后 yield 产出 hello 变量的值 'world'print(c.send('world'))# 之后协程结束,后续再 send 值会抛出异常 StopIteration

运行结果:

Python生成器和基于生成器的协程

三、协程的注意点

协程注意点

协程需要使用send(None)或者next(coroutine)来预激(prime)才能启动
2.在yield处协程会暂停执行
3.单独的yield value会产出值给调用方
4.可以通过 coroutine.send(value)来给协程发送值,发送的值会赋值给 yield表达式左边的变量value = yield
5.协程执行完成后(没有遇到下一个yield语句)会抛出StopIteration异常

四、协程装饰器

避免每次都要用 send 预激它

from functools import wrapsdef coroutine(func):  # 这样就不用每次都用 send(None) 启动了“”“装饰器:向前执行到一个 `yield` 表达式,预激 `func` ”“”@wrops(func)def primer(*args, **kwargs):   # 1gen = func(*args, **kwargs)  # 2next(gen)  # 3return gen  # 4return primer

五、Python3原生协程

python3.5引入 async/await支持原生协程(native coroutine)

import asyncioimport datetimeimport randomasync def display_date(num, loop):end_time = loop.time() + 50.0while True:print('Loop: {} Time: {}'.fORMat(num, datetime.datetime.now())if (loop.time() + 1.0) >= end_time:breakawait asyncio.sleep(random.randint(0, 5))loop = asyncio.get_event_loop()asyncio.ensure_future(display_date(1, loop))asyncio.ensure_future(display_date(2, loop))loop.run_forever()

看完了这篇文章,相信你对“Python生成器和基于生成器的协程”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网Python频道,感谢各位的阅读!

--结束END--

本文标题: Python生成器和基于生成器的协程

本文链接: https://lsjlt.com/news/279094.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python生成器和基于生成器的协程
    小编给大家分享一下Python生成器和基于生成器的协程,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是生成器Generator生成器就是可以生成值的函数2.当一个函数里有了 yield关键字就成了生成器3.生成器可...
    99+
    2023-06-15
  • 详解Python生成器和基于生成器的协程
    目录一、什么是生成器二、基于生成器的协程三、协程的注意点四、协程装饰器五、python3原生协程一、什么是生成器 Generator 1.生成器就是可以生成值的函数 2.当一个函数里...
    99+
    2024-04-02
  • Python生成器和协程怎么用
    本篇内容主要讲解“Python生成器和协程怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python生成器和协程怎么用”吧!认识生成器你将如何生成任意长度...
    99+
    2024-04-02
  • python列表生成器与生成器
    列表生成器是python内置的非常简单却非常强大的。生成一个列表[1,2,3,4]可以用list(range(1,5))列表生成器的应用如果上面的公式加上判断,就可以筛选出想要的结果,比如仅需要偶数的平方使用多层循环生成器生成器与列表生成器...
    99+
    2023-01-31
    生成器 列表 python
  • Python3.10 Generator生成器Coroutine原生协程详解
    目录引言协程底层实现业务场景结语引言 普遍意义上讲,生成器是一种特殊的迭代器,它可以在执行过程中暂停并在恢复执行时保留它的状态。而协程,则可以让一个函数在执行过程中暂停并在恢复执行时...
    99+
    2022-12-28
    Python生成器原生协程 Python Generator Coroutine
  • python 生成器
    先来讲一个列表生成式列表生成式:就是一个用来生成列表的特定语法形式的表达式。基础语法格式[exp for iter_var in iterable]普通创建列表是这样的a = [1...
    99+
    2023-01-30
    生成器 python
  • python生成器
    所属网站分类: python基础 > 装饰器,迭代器,生成器 作者:慧雅 原文链接: http://www.pythonheidong.com/blog/article/20/ 来源:python黑洞网 www.python...
    99+
    2023-01-31
    生成器 python
  • Python---生成器
    # 生成器 # 通过列表生成式,我们可以直接创建一个列表 # 但是,受到内存限制,列表容量肯定是有限的 # 创建一个100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了 #...
    99+
    2023-01-31
    生成器 Python
  • Python:生成器
        生成器是Python中的一个高级用法,有段时间我对生成器的理解颇为费劲,直到我看到一句话“yield语句挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行”后,让我恍然大悟,这是生成器中的状态挂起,这句话让我想起...
    99+
    2023-01-31
    生成器 Python
  • Python基础入门(迭代器和生成器)
    1 Python迭代器 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。 迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next(),且字符串、列表或元组对象...
    99+
    2023-01-30
    生成器 入门 迭代
  • python迭代器和生成器
    1.经典迭代器 import re RE_WORD = re.compile('\w+') class Sentence: def __init__(self, text): self.text = te...
    99+
    2023-01-30
    生成器 迭代 python
  • 生成器进化到协程 Part 1
    前言 这篇文章大部分来自 David Beazley 在 PyCon 2014 的 PPT 《Generators: The Final Frontier》。这个PPT很长而且非常烧脑,建议在阅读前应了解 Python 的生成器与携程相关...
    99+
    2023-01-31
    生成器 到协程 Part
  • 基于Python做一个简单的动图生成器
    目录序言代码实战序言 现在的年轻人都开始每天保温杯里泡枸杞,这怎么能行呢? 想要每天过的好,美女必然少不了,每天看美女,只为了愉悦心情,心情好了,才长寿。 于是怀揣着愉悦心情的想法,...
    99+
    2023-01-03
    Python动图生成器 Python动图生成 Python动图
  • 基于Python编写一个二维码生成器
    目录前言1、安装第三方库2、QRCode参数解释3、自定义二维码生成器4、给二维码加图片5、全部代码前言 二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Res...
    99+
    2024-04-02
  • Python生成器/生成器函数/推导式/
    1. 生成器   生成器的本质就是迭代器   在python中有三种⽅方式来获取⽣生成器:     1. 通过生成器函数     2. 通过各种推导式来实现⽣成器     3. 通过数据的转换也可以获取生成...
    99+
    2023-01-31
    生成器 函数 Python
  • 列表生成式,迭代器和生成器
    一、列表生成式 现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],现在要求把列表里的每个值加1,你怎么实现?你可能会想到的几种方法: 方法1: a = [0, 1, 2, 3, 4, 5, 6, 7, 8...
    99+
    2023-01-31
    生成器 迭代 列表
  • python3基础:生成器
    在python中,边循环边计算的机制就称为生成器(generator)。使用生成器当用到数据的时候在生成,这样可以节约空间,提高效率。生成器是一种特殊类型的迭代器,所以也会有__init__()和__next__()两个方法: __it...
    99+
    2023-01-31
    生成器 基础
  • python基础:迭代器与生成器
    一、迭代器 迭代器只能向前访问,不能后退字典,列表,元组,字符串,range都是可以迭代的对象。 1、创建迭代器 `dict={1:3,2:4,3:5,4:6}key = iter(dict)print(key)print(next(key...
    99+
    2023-01-31
    生成器 迭代 基础
  • Python中的生成器
    目录1.列表生成式2.生成器1.列表生成式 代码演示: # 列表生成式 list_1 = [x**2 for x in range(10)] # x**2处也可以放函数 pri...
    99+
    2024-04-02
  • 8 python的迭代器和生成器
    概述         在上一节,我们介绍了Python的模块和包,包括:什么是模块、导入模块、自定义模块、__name__、什么是包、创建包、导入包等内容。在这一节中,我们将介绍Python的迭代器和生成器。在Python中,迭代器是一个非...
    99+
    2023-09-01
    python 迭代器 生成器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作