首页 > 其他分享 >生成器

生成器

时间:2023-12-29 09:01:13浏览次数:17  
标签:生成器 yield start range print my

生成器

生成器:是一种特殊的迭代器,迭代器不一定是生成器,生成器一定是迭代器

【1】生成器创建方式

# 创建方式一
# (1)列表生成式:列表
num_list = ([i for i in range(10)])
print(num_list,type(num_list)) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>
# (2)元组生成式:生成器
num_tuple = (i**2 for i in range(10))
print(num_tuple,type(num_tuple))
#查看元组生成器里面的数据: 类型强转
print(list(num_tuple)) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 生成器也能用 __next__()方法,因为生成器是一种特殊的迭代器
print(num_tuple.__next__())

【2】yield关键字

  • 使用yield关键字定义一个生成器函数时,生成器函数中的yield语句会暂停函数执行并返回一个值,下一次调用该函数时会继续执行并返回下一个值。

    def my_generator():
        yield 1
        yield 2
        yield 3
    
    
    my_generator = my_generator()
    print(next(my_generator))
    print(next(my_generator))
    print(next(my_generator))
    
  • 向yield传值的前提 必须卡在使用这个值的前面的yield上面

def chifan():
    print('开始吃饭了')
    while True:
        food = yield
        print(f'得到的食物是 :>>>{food},开始吃饭:>>> {food}')


my_chifan = chifan()
print(next(my_chifan))
print(my_chifan.send('水煮鱼'))#send方法只能传一个位置参数,不能传两个,如果想传多个,可以考虑可变数据类型:字典/列表/元组/集合

【3】用生成器实现for循环

def my_range_one(start, end, step=1):
    if end < start:
        print(f'开始值不能大于结束值!')
    while start < end:
        yield start
        start += step

my_range = my_range_one(start=1, end=10, step=1)
print(next(my_range))
print(next(my_range))
print(next(my_range))


for i in my_range_one(start=1, end=10, step=1):
    print(i)


def my_range(start, stop, step=1):
    print('start...')
    while start < stop:
        yield start
        start += step
    print('end...')

标签:生成器,yield,start,range,print,my
From: https://www.cnblogs.com/dhyuan/p/17917218.html

相关文章

  • python生成器generator的用法
    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否......
  • Builder 生成器模式简介与 C# 示例【创建型2】【设计模式来了_2】
    Builder生成器模式简介与C#示例【创建型2】【设计模式来了_2】 阅读目录〇、简介1、什么是生成器模式?2、优缺点和使用场景一、简单的示例代码二、生成器模式结构三、在.Net框架中的实际应用四、相关模式回到顶部〇、简介1、什么是生成器模式?一句话......
  • 代码生成器20231218
      生成器 ......
  • 随机幸运号码自动生成器之Python宝典【下】
    一、背景在随机幸运号码自动生成器之Python宝典【上】中,成功开发了一个能够展示幸运号码并且能够动态显示当前时间的浮动小工具,需要在有Python环境的电脑上运行。本文将介绍如何将小工具打包成exe并使其能够自动在windows电脑上运行二、步骤打包exe之前的文章中已经详细介绍过pyins......
  • 干货分享 | TSMaster报文发送的信号生成器操作说明
    信号生成器功能是TSMaster分析中的报文发送模块。信号生成器用于发送和配置每个CAN/LIN信号的值变化行为,简而言之,这是一个可以控制和调整CAN/LIN信号值的功能。我们可选择的信号生成器类型有8种,今天重点和大家分享一下关于TSMaster信号生成器的8种类型的使用方式。本文关键字:信号......
  • 基于Tensorflow技术开发的计算机毕业设计辅助生成器(使用AI大模型技术)
    这是一个辅助生成计算机毕业设计的工具,可以自动完成毕业设计的源码。它基于几百个github上面开源的java和python项目,运用tensorflow技术,训练出了AI大模型。基本实现了计算机毕业设计生成器,能够初步生成Java或python基本源码。目前该项目处理实验阶段,还不成熟,成功率55%左右。体验地......
  • 机器码生成器
    首先看下页面 代码如下privatevoidbtn_Create_Click(objectsender,EventArgse){stringuuid=GetUuid();stringjiqima=GenerateMD5(uuid).ToUpper();tb_IdCard.Text=jiqima;}///<summary>......
  • 一款基于.NET Core的快速开发框架、支持多种前端UI、内置代码生成器
    前言经常看到有小伙伴在技术群里问有没有什么好用且快速的开发框架推荐的,今天就给大家分享一款基于MITLicense协议开源、免费的.NETCore快速开发框架、支持多种前端UI、内置代码生成器、一款高效开发的利器:WalkingTec.Mvvm框架(简称WTM)。官方项目介绍WalkingTec.Mvvm框架(简称W......
  • 随机幸运号码自动生成器之Python宝典【上】
    一、前言需求背景描述前面我编写了一段能生成随机幸运号码的代码,但是并不实用,每次去买颜色艳丽的票之前都需要在PyCharm上运行并将幸运号码在控制台打印出来为解决这个问题,尝试使用Python的ttkbootstrap实现简单的号码展示,并根据当前日期展现对应类型(超级彩票、彩色球票)的幸运号码,......
  • 迭代器与生成器
    目录一、迭代器与生成器的概念迭代器(Iterator)生成器(Generator)共同点二、使用案例2.1迭代器2.2生成器三、使用场景3.1使用生成器的场景3.2使用迭代器的场景一、迭代器与生成器的概念​ 迭代器(Iterator)和生成器(Generator)在Python中都用于处理序列数据,但它们有一些重要的区......