yield 和 生成器(generator)

Python3

迭代器

https://www.runoob.com/python3/python3-iterator-generator.html

#!coding:utf8#author:yqq
#date:2020/1/14 0014 15:21
#description:class MyNumber:def __init__(self, init_number = 1 , bound_number = 99999):self.n  = init_numberself.bound = bound_numberdef __iter__(self):  #实现  __iter__ 方法return self def __next__(self): #实现  __next__ 方法x = self.nif x > self.bound:raise StopIterationself.n += 1return  xdef main():num_iter = MyNumber(init_number=9, bound_number=888)print(  next(num_iter)  )print(  next(num_iter)  )print(  next(num_iter)  )# for i in num_iter:#     print(i)# while True:#     print(next(num_iter))while True:try:print(next(num_iter))except StopIteration:print('over')breakexcept  Exception as e:print(f'error: {e}')passif __name__ == '__main__':main()

yield 和 生成器(generator)

  • 列表生成器

    >>> [i for i in range(10)]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
  • 生成器函数

    #!coding:utf8#author:yqq
    #date:2020/1/14 0014 15:29
    #description:
    #  对于yield的理解:
    #      生成器函数遇到 yield, 立即返回, 并保存现场(保存了变量的值), 下次再次从yield后的语句执行
    #    换句话说: yield保存了函数执行过程中的 "中间状态"  下次再次从"中间状态" 继续执行def my_fib(nmax = 99):""":param nmax: 最大数, 防止无限生成下去:return:"""counter  =  nmaxa , b = 0, 1yield a   # 第一个数 0yield b   # 第二个数  1for i in range(counter):yield a + ba, b = b, a + bdef main():fib_gen = my_fib()# print(next(fib_gen))# print(next(fib_gen))# print(next(fib_gen))# print(next(fib_gen))# print(next(fib_gen))for n in fib_gen:print(n)passif __name__ == '__main__':main()
    

基于生成器的协程

使用 @asyncio.coroutine 修饰函数

此装饰器 已弃用 并计划觉得 Python 3.10 中移除。


import asyncio@asyncio.coroutine
def old_style_coroutine():print('old_style_coroutine()')yield from asyncio.sleep(1)async def main():await old_style_coroutine()asyncio.run( main() )

async 和 await

从 Python3.7开始 使用 async和await 代替 @asyncio.coroutineyield from

asyncio官方文档: https://docs.python.org/zh-cn/3/library/asyncio.html

https://www.cnblogs.com/dhcn/p/9032461.html

#!coding:utf8#author:yqq
#date:2020/1/14 0014 11:49
#description:import requests
import asyncio
import timeasync def test2(i):print('\n')print('------进入test2-------------')print('-------开始 await  other_test()------')r = await other_test(i)print('-------结束 await  other_test()------')print(i,r)print('----------结束test2------------------')print('\n')async def other_test(i):print('\n')print('-----------进入 other_test()-----------')print('开始 http  get 请求')r = requests.get(i)print('结束 http get请求')print(i)print('开始 休眠 4s')if 'sina' in i:await asyncio.sleep(5)  #挂起当前协程, 让出cpu给其他协程(继续事件循环)await asyncio.sleep(0.1)  #挂起当前协程, 让出cpu给其他协程(继续事件循环)# time.sleep(4)  #如果改成 time.sleep(4)  则完全是同步方式(顺序执行) 会阻塞事件循环print(f'\033[32m 结束 {i} 休眠 \033[0m')print(time.time()-start)print('--------结束other_test------------------')print('\n')return rurl = ["https://www.jd.com","https://www.sina.com","https://www.baidu.com"]print('开始创建事件循环 ')
loop = asyncio.get_event_loop()print('开始生成 task')
task = [asyncio.ensure_future(test2(i)) for i in url]start = time.time()print('开始运行事件循环')
loop.run_until_complete(asyncio.wait(task))print('\n')
print('结束运行事件循环')
endtime = time.time()-startprint(endtime)print('关闭事件循环')
loop.close()

异步echo_server

from curio import run, spawn
from curio.socket import *async def echo_server(address):sock = socket(AF_INET, SOCK_STREAM)sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)sock.bind(address)sock.listen(5)print('Server listening at', address)async with sock:while True:client, addr = await sock.accept()await spawn(echo_client, client, addr)async def echo_client(client, addr):print('Connection from', addr)async with client:while True:data = await client.recv(100000)if not data:breakawait client.sendall(data)print('Connection closed')if __name__ == '__main__':run(echo_server, ('',25000))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Duck Bro的第512天创作纪念日

Tips:发布的文章将会展示至 里程碑专区 ,也可以在 专区 内查看其他创作者的纪念日文章 我的创作纪念日第512天 文章目录 我的创作纪念日第512天一、与CSDN平台的相遇1. 为什么在CSDN这个平台进行创作?2. 创作这些文章是为了赚钱吗&#xff1f…

详细说说机器学习在安防领域的应用

机器学习在安防领域的应用日益广泛,其强大的数据分析和模式识别能力为安全监控、预警和防范带来了革命性的变化。以下是机器学习在安防领域的几个主要应用: 异常检测: 通过学习监控画面中的正常运行状态,智能安防系统可以在遇到异…

算法金 | AI 基石,无处不在的朴素贝叶斯算法

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 历史上,许多杰出人才在他们有生之年默默无闻, 却在逝世后被人们广泛追忆和崇拜。 18世纪的数学家托马斯贝叶斯…

用函数指针求a和b中的大者

指针变量也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。 先按一般方法编写程序: 可以用一个指针变量指向max函数,然后通过该指…

【python/pytorch】已解决ModuleNotFoundError: No module named ‘torch‘

【PyTorch】成功解决ModuleNotFoundError: No module named torch 一、引言 在深度学习领域,PyTorch作为一款强大的开源机器学习库,受到了众多研究者和开发者的青睐。然而,在安装和使用PyTorch的过程中,有时会遇到一些问题和挑战…

NLP--词袋模型

词袋模型如同所有单词打散放到一个袋子中,因此这种模型无法估计语义和语序问题,每个单词都是独立的。 1.文本分词:调用jieba库,使用精确模式对每个句子进行分词,并存入列表。 2.去除停用词:遍历停用词文件…

地图元素。

常见的地图元素: 道路(Road): 主要道路(如高速公路、主干道)次要道路(如街道、小巷)辅助道路(如人行道、自行车道)车道(Lane)&#x…

爬山算法介绍(极简)

一、引言 爬山算法,作为一种启发式搜索算法,是人工智能和运筹学领域中的经典算法之一。它通过模拟人类爬山的直观过程,逐步向评价函数值更优的方向“攀爬”,以期找到局部最优解。尽管这种算法有其局限性,特别是容易陷入…

排序-快排算法对数组进行排序

目录 一、问题描述 二、解题思路 1.初始化 2.将右侧小于基准元素移到左边 3.将左侧大于基准元素移到右边 4.重复执行上面的操作 5.对分好的左、右分区再次执行分区操作 6.最终排序结果 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 快排算法实现数组排序&am…

内存EDAC的内核支持情况

Linux内核对EDAC(Error Detection and Correction)支持的发展体现了对硬件错误管理和系统可靠性的持续重视。 EDAC作为Linux内核的一部分,其早期集成主要集中在基本的内存错误检测和纠正功能上,为ECC内存提供了基础支持。随着内核…

算法 | 拯救小a之如何获取多行数据

小a生活在一个只有26个小写字母的文本里,我们知道在26个小写字母里,a是字典序最小的,所以小a十分的自卑,今天小a实在是受不了了,他想和伙伴们一起逃出这个文本,在逃出之前,他想问问你&#xff0…

力扣每日一题130:被围绕的区域

题目 中等 相关标签 相关企业 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O ,找到所有被 X 围绕的区域,并将这些区域里所有的 O 用 X 填充。 示例 1: 输入:board [["X","X","X"…

从GPU到ASIC,博通和Marvell成赢家

ASIC市场上,博通预计今年AI收入将达到110亿美元以上,主要来自与Google和Meta的合作;Marvell预计2028年AI收入将达到70亿至80亿美元,主要来自与Amazon和Google的合作。 随着芯片设计和系统复杂性的增加,科技大厂将更多地…

主成分分析

主成分分析(Principal Component Analysis,简称PCA)是一种统计方法,它通过正交变换将一组可能相关的变量转换成一组线性不相关的变量,这些不相关变量称为主成分。PCA常用于降维、数据压缩和模式识别等领域。 PCA的主要…

tcp协议中的起始序号

目录 起始序号 引入 序号和确认序号 总结 起始序号 引入 在介绍TIME_WAIT状态时,我们就提到了起始序号 -- tcp协议的超时重传(去重,确定时间),通信建立机制(三次握手,通信,四次挥手的细节和图解),为什么是3次/4次,肉机,全/半连接队列,SYN洪水,TIME_WAIT状态(解决,为什么出现…

重写setter方法要小心递归调用

错误的重写 // 假设SQIPerson有一个子类叫做SQISmithPerson, 专门表示那些姓"Smith"的人, 重写了 lastName 属性对应的设置方法 - (void)setLastName:(NSString *)lastName {if (![lastName isEqualToString:"Smish"]) {[NSException raise:NSInvalidArgu…

【系统学C++】一、从C语言到C++(一)

【系统学C】一、从C语言到C(一) C介绍C语言和C的联系C介绍 头文件命名空间定义命名空间使用命名空间中的名称使用using声明或指令命名空间与C语言的对比给命名空间起别名注意事项std 标准输入输出std::endl使用std::cout进行输出使用std::cin进行输入格式…

EGST:Explicit Geometric Structure Transformer论文解读

目录 一、导言 二、相关工作 1、3D局部描述子 2、点云配准方法 三、EGST模型 1、结构化特征 2、特征提取 3、点云匹配 4、变换估计 5、损失函数 四、实验 1、数据集 2、评估指标 3、细节 4、对比实验 一、导言 该论文提出一种基于增强几何结构特征的点云配准方…

flutter image_picker 执行拍照的图片怎么保存到本地

在 Flutter 中,使用 image_picker 插件拍照的图片默认会被保存到设备的临时目录中。这个临时目录的具体位置取决于设备的操作系统。在 iOS 上,它通常是应用的沙盒目录;在 Android 上,它通常是应用的缓存目录。 这些图片不会被自动…

C语言详解文件操作

目录 什么是文件? 为什么使用文件? 程序文件和数据文件、文本文件和二进制文件 1.程序文件和数据文件 1.1程序文件 1.2数据文件 2.文本文件和二进制文件 文件的打开和关闭(流、标准流、文件指针和文件的打开与关闭) 1.流和标…